2013-02-08 4 views
0

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

Я попытался добавить фильтр и сравнить post_date с XML-фидом с тем, что было в Wordpress (поскольку я даю сообщение тот же пост_данец, что и 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?

ответ

1

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

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

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

Да, это имело смысл, но, к сожалению, это не сработало. Я не уверен на 100%, если правильно использую запрос, но это первый раз, когда я действительно нуждаюсь в нем. –

0

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

я удалил фильтры, потому что я не уверен на 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'); 
    } 

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

Смежные вопросы