2017-10-04 26 views
0

我想在30天后垃圾(不強制刪除)自定義帖子類型。 要做到這一點,我發現從@彼得 - 古森一個很好的解決方案的天數後刪帖:https://wordpress.stackexchange.com/questions/209046/delete-expired-posts-after-a-number-of-days-after-they-expiredWordPress:垃圾30天后自定義帖子類型

我的問題是,該功能將刪除該自定義文章類型的所有帖子,並沒有按」不要使用垃圾。

我的代碼如下所示:

function get_exired_posts_to_delete() 
{ 
    /** 
    * If you need posts that expired more than a week ago, we would need to 
    * get the unix time stamp of the day a week ago. You can adjust the relative 
    * date and time formats as needed. 
    * @see http://php.net/manual/en/function.strtotime.php 
    * @see http://php.net/manual/en/datetime.formats.php 
    */ 
    // As example, we need to get posts that has expired more than 7days ago 
    $past = strtotime("- 1 week"); 

    // Set our query arguments 
    $args = [ 
     'fields'   => 'ids', // Only get post ID's to improve performance 
     'post_type'  => 'job', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'date_query' => array(
      'column' => 'post_date_gmt', 
      'before' => '30 days' 
     ) 
    ]; 
    $q = get_posts($args); 

    // Check if we have posts to delete, if not, return false 
    if (!$q) 
     return false; 

    // OK, we have posts to delete, lets delete them 
    foreach ($q as $id) 
     wp_delete_post($id); 
} 

// expired_post_delete hook fires when the Cron is executed 
add_action('expired_post_delete', 'get_exired_posts_to_delete'); 

// Add function to register event to wp 
add_action('wp', 'register_daily_post_delete_event'); 
function register_daily_post_delete_event() { 
    // Make sure this event hasn't been scheduled 
    if(!wp_next_scheduled('expired_post_delete')) { 
     // Schedule the event 
     wp_schedule_event(time(), 'daily', 'expired_post_delete'); 
    } 
} 

有幹啥錯日期查詢?

是否有更好的解決方案使用服務器cron而不是WP cron?

回答

0

我找到了我的問題的解決方案。

對於垃圾問題,我已將參數wp_delete_post()更改爲wp_trash_post(),因爲wp_delete_post()僅適用於本機帖子,頁面和附件。從@rarst這裏大答案:https://wordpress.stackexchange.com/questions/281877/error-after-deleting-custom-post-type-with-a-function-no-trash-used/281888#281888

這裏是我的代碼:

function get_delete_old_jobs() { 
    // Set our query arguments 
    $args = [ 
     'fields'   => 'ids', // Only get post ID's to improve performance 
     'post_type'  => 'job', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'date_query' => array(
      'before' => date('Y-m-d', strtotime('-30 days')) 
     ) 
    ]; 
    $q = get_posts($args); 

    // Check if we have posts to delete, if not, return false 
    if (!$q) 
     return false; 

    // OK, we have posts to delete, lets delete them 
    foreach ($q as $id) 
     wp_trash_post($id); 
} 

// expired_post_delete hook fires when the Cron is executed 
add_action('old_job_delete', 'get_delete_old_jobs'); 


// Add function to register event to wp 
add_action('wp', 'register_daily_jobs_delete_event'); 

function register_daily_jobs_delete_event() { 
    // Make sure this event hasn't been scheduled 
    if(!wp_next_scheduled('old_job_delete')) { 
     // Schedule the event 
     wp_schedule_event(time(), 'hourly', 'old_job_delete'); 
    } 
} 
相關問題