Bao gồm WP_Query trong tệp PHP của riêng tôi?


7

Tôi muốn viết một cronjob cho chính mình. Nhưng tôi cần có quyền truy cập WP_Queryvà quyền để xóa bài viết, v.v.

Câu hỏi của tôi bây giờ là, làm thế nào tôi có thể đưa WP_Queryhàm vào tệp PHP của riêng mình và tôi có cần chỉnh sửa hoặc thay đổi một số quyền để xóa hoặc tạo bài đăng với cronjob đó không?

Câu trả lời:


9

Tải WordPress trong PHP Script tùy chỉnh:

Bạn cần tải chức năng cốt lõi WordPress cần thiết trong tập lệnh PHP tùy chỉnh của mình WP_Queryđể hoạt động chính xác.

Ví dụ: giả sử bạn có một tệp PHP tùy chỉnh có tên my-cron.phpvà WordPress được cài đặt trong thư mục gốc, như thế này:

public_html/
    index.php
    my-cron.php <--
    wp-load.php
    wp-settings.php
    ...
    wp-admin/
    wp-content/
    wp-includes/

Trong thiết lập này, nếu bạn muốn sử dụng WP_Querytrong my-cron.phptệp, bạn cần tải wp-load.phptệp. Vì vậy, trong my-cron.phptập tin bạn cần phải có MÃ sau:

if ( ! defined('ABSPATH') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

Truy cập WP_Query:

Tại thời điểm này, bạn sẽ có quyền truy cập WP_Query, vì vậy bạn có thể sử dụng nó như thế này:

// simply selecting posts with category name "wordpress"
$the_query = new WP_Query( array( 'category_name' => 'wordpress' ) );
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
}
else {
    echo "No post found for category named wordpress";
}

Xóa bài viết:

Tuy nhiên, WP_Query không có chức năng xóa. Cho rằng bạn sẽ cần phải sử dụng wp_delete_post()chức năng hoặc WPDBlớp. Việc sử dụng wp_delete_post()được khuyến nghị vì nó sẽ quan tâm đến nhiều phụ thuộc, tuy nhiên, nếu bạn cần kiểm soát nhiều hơn, thì bạn có thể sử dụng biến WPDBlớp hoặc $wpdbbiến toàn cục, nhưng hãy cẩn thận nếu bạn chọn đường dẫn đó.

Ví dụ: CODE sau sẽ xóa bài đăng có ID 1:

$deleted = wp_delete_post( 1 );
if( $deleted === false ) {
    echo "Couldn't delete Post with ID=1";
}
else {
    echo "Deleted Post with ID=1";  
}

Tất nhiên bạn có thể kết hợp WP_Queryvới wp_delete_postđể tìm và xóa các bài viết đáp ứng các tiêu chí cụ thể.

Cài đặt Cron:

Khi bạn đã viết xong tập lệnh PHP tùy chỉnh, bạn cần thiết lập công việc định kỳ để chạy dưới dạng yêu cầu HTTP, như sau:

5 * * * * wget -q -O - http://your-domain.com/my-cron.php

Bảo vệ:

Vì truy cập WP_Queryhoặc wp_delete_postchức năng không yêu cầu bất kỳ xác thực (hoặc quyền) theo mặc định, bạn cần đảm bảo my-cron.phpkhông thể truy cập công khai. Ví dụ: bạn có thể thêm phần sau vào đầu my-cron.phptệp để chỉ cấp quyền truy cập localhost:

$allowed_ip = '127.0.0.1';
if( $allowed_ip !== $_SERVER['REMOTE_ADDR'] ) {
    exit( 0 );
}

Có cách nào khác để lặp qua tất cả các bài viết của tôi từ trang productkhông? - Vì vấn đề của tôi là, tôi nhận được thông báo lỗi này:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8388616 bytes) in /var/www/vhosts/httpdocs/wp-includes/wp-db.php on line 1842
Jan

Có nhiều cách khác, bạn thậm chí có thể chạy truy vấn tùy chỉnh. Nhưng trước tiên bạn cần tìm hiểu chính xác vấn đề là gì, một truy vấn bình thường không nên làm cạn bộ nhớ trừ khi bạn có rất nhiều bài đăng. Tôi đề nghị bạn gửi một câu hỏi khác với MÃ bạn đang sử dụng.
Fayaz

0

Đây có phải là để xóa hoặc tạo các trang web trong môi trường WordPress Multisite? Nếu vậy, bạn có thể truy cập WP_Query để xử lý các trang web bằng cách đặt hàm vào tệp PHP trong thư mục mu-plugin được kích hoạt mạng.


Không, đó là một trang web bình thường
ngày 1

Vì vậy, bạn muốn tạo một cronjob để xóa một trang web?
Kinna T

Có - đó phải được tự động. Nhưng tôi cần WP_Query cho việc này
ngày 1

Nếu bạn đang làm việc với một trang web duy nhất, bạn không thể tạo một truy vấn WordPress tạo hoặc xóa toàn bộ một trang web, vì nó phải cài đặt / gỡ cài đặt hoàn toàn WordPress. Nếu bạn đang làm việc trong một môi trường nhiều trang, có các chức năng để tạo và xóa các trang web được tích hợp trong hệ thống có thể được gọi.
Kinna T

Xin lỗi ... tôi có nghĩa là một cronjob đang xóa các trang và không phải trang web lỗ!
Ngày 1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.