通过cronjob删除自定义字段日期早于当前日期的帖子

时间:2013-08-17 23:28:53

标签: wordpress custom-fields cron-task

我想做一个cron工作,删除帖子的自定义字段中比日期更早的所有帖子。我的函数中有以下函数.php我的自定义字段名称为bewerbungs_frist

    function foobar_truncate_posts(){
    global $wpdb;

    $currenttime = new DateTime();
    $currenttime_string = $currenttime->format('Ymd');

    # Set your threshold of max posts and post_type name
    $post_type = 'job';

    # Query post type
    $query = "
        SELECT ID FROM $wpdb->posts
        WHERE post_type = '$post_type'
        AND post_status = 'publish'
        ORDER BY post_modified DESC
    ";
    $results = $wpdb->get_results($query);

    # Check if there are any results
     if(count($results)){
            foreach($results as $post){

                $customfield = get_field('bewerbungs_frist', $post->ID);
                $customfield_object = new DateTime($customfield);
                $customfield_string = $customfield_object->format('Ymd');


                if ( $customfield_string < $currenttime_string ) {

                    echo "The value of the custom date field is in the past";
                    echo $customfield_string;


                    $purge = wp_delete_post($post->ID);
                }
            }
        }

}

foobar_truncate_posts();

我使用插件来处理我的cronjobs。 Hock名称为:foobar_truncate_posts,参数为[]

cronjob有效,但它不会删除那些日期比今天更早的自定义日期的帖子。这两个变量是相同的。

$currenttime_string 20130820 $customfield_string 20130820

1 个答案:

答案 0 :(得分:1)

你的代码中有一个拼写错误,你在$result结束时错过了's'。

此:

  foreach($result as $post){

应该是这样的:

  foreach($results as $post){

我刚试了一下。完成修复后,wp_delete_post()工作得很好。


修改


我真的不清楚你要做什么。您想检查自定义字段是否设置为过去的某个时间? continue的目的是什么?另外,我猜你正在使用高级自定义字段(ACF)。使用jquery日期选择器,您可以默认将日期格式设置为Ymd,这样您就不必将其转换为DateTime对象。

无论如何,这个函数应该解释如何正确设置和比较时间值,你应该可以从那里获取它:

function foobar_truncate_posts(){
    global $wpdb;

    $currenttime = new DateTime();
    $currenttime_string = $currenttime->format('Ymd');

    # Set your threshold of max posts and post_type name
    $post_type = 'post_type_job';

    # Query post type
    $query = "
        SELECT ID FROM $wpdb->posts
        WHERE post_type = '$post_type'
        AND post_status = 'publish'
        ORDER BY post_modified DESC
    ";
    $results = $wpdb->get_results($query);

    # Check if there are any results
     if(count($results)){
            foreach($results as $post){

                $customfield = get_field('bewerbungs_frist', $post->ID);
                $customfield_object = new DateTime($customfield);
                $customfield_string = $customfield_object->format('Ymd');

                if ( $customfield_string < $currenttime_string ) {

                    echo "The value of the custom date field is in the past";

                    $purge = wp_delete_post($post->ID);
                }
            }
        }

}

foobar_truncate_posts();