Удалить сообщения с датой пользовательского поля старше текущей даты через cronjob

Я хочу, чтобы задание cron удаляло все сообщения старше даты в произвольном поле сообщения. У меня есть следующая функция в моем functions.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


person Benjamin    schedule 17.08.2013    source источник


Ответы (1)


в вашем коде опечатка, вам не хватает 's' в конце $result.

Этот:

  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();
person JP Lew    schedule 18.08.2013
comment
это не работает для меня. Вы пробовали это с настраиваемым типом сообщения и настраиваемым полем для даты? - person Benjamin; 18.08.2013
comment
Другая проблема заключается в том, что ваше сравнение меньшего чем пытается сравнить объект со строкой, поэтому это приведет к сбою вашей функции. $currenttime необходимо преобразовать следующим образом: $currenttime_string = $currenttime->format('Ymd'); - person JP Lew; 18.08.2013
comment
$currenttime_string и $customfield_string имеют одинаковое значение. Сегодня 20.08.2013, и если я публикую что-то с настраиваемым полем (ACF-Plugin), установленным на 19.08.2013, cronjob не удаляет это сообщение. - person Benjamin; 20.08.2013
comment
что происходит, когда вы идете: echo $customfield? Ваше пользовательское поле, вероятно, установлено неправильно. - person JP Lew; 21.08.2013