Пишите только если его еще нет

Я создаю плагин для Wordpress, где я извлекаю данные из XML-канала и публикую все эти данные с помощью функции wp_insert_post(). Плагин запускается каждый час, поэтому я должен предотвратить двойные сообщения.

Я попытался добавить фильтр и сравнить post_date из фида XML с тем, что в Wordpress (поскольку я даю сообщению тот же post_date, что и XML), но это не работает, и я не могу понять, почему.

Вот мой код:

    add_filter('posts_where', 'checkPosts'); //I add a filter
    $query = new WP_Query('post_type=event'); // Make a query for the custom post_type 'event'
    if(!$query->have_posts()) { //If it doesn't have any posts with the same post_date post it
        $post_id = wp_insert_post($post);
        wp_set_object_terms($post_id, $genres, 'genre');
    }
    remove_filter('posts_where', 'checkPosts');

function checkPosts($where = '') {
    $where .= " AND post_date = ".$post_date;
    return $where;
}

Может ли кто-нибудь показать мне мои ошибки или дать мне другую технику для предотвращения одинаковых сообщений в Wordpress?


person Mike Hoogland    schedule 08.02.2013    source источник


Ответы (2)


Я не особенно знаком с фильтрами Wordpress, но я не верю, что двойной знак равенства является допустимым SQL.

Попробуйте изменить функцию фильтра:

function checkPosts($where = '') {
    $where .= " AND post_date = ".$post_date;
    return $where;
}
person Julio    schedule 08.02.2013
comment
Да, это имело смысл, но, к сожалению, не сработало. Я не уверен на 100%, правильно ли я использую запрос, это первый раз, когда он мне действительно нужен. - person Mike Hoogland; 09.02.2013

Хорошо, так что, если кто-то пытается сделать то же самое, это то, что сработало для меня.

Я удалил фильтры, потому что я не уверен на 100%, как их использовать, и всего этого можно добиться намного быстрее/проще с помощью этого метода:

$query = new WP_Query('post_type=event&year='.$post_Y.'&monthnum='.$post_m.'&day='.$post_d.'&hour='.$post_H.'&minute='.$post_i);
    if(!$query->have_posts()) {
        $post_id = wp_insert_post($post);
        wp_set_object_terms($post_id, array( $venue_name ), 'locatie');
    }

Просто введите год, номер месяца и т. д. с информацией, которую вы хотите использовать, и все!

person Mike Hoogland    schedule 09.02.2013