Публикувайте само ако все още не съществува

Създавам плъгин за 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