Проверьте, существует ли уже должность с названием


Я пишу плагин, который принимает xml-канал и публикует его в WordPress с помощью wp-cron

Все работает отлично, за исключением того, что он продолжает добавлять одни и те же сообщения снова и снова.

Итак, я работаю над системой, чтобы проверить, существует ли уже сообщение с таким названием.

Я написал это, но оно всегда возвращается "уже существует"

global $wpdb;
        $query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = %s', $article->heading);
        $wpdb->query( $query );

        if ( $wpdb->num_rows ) {
            error_log('already exists');
        } else {                
            wp_insert_post($post, $wp_error);
        }

Я довольно новичок в работе с базой данных WordPress, и я видел $wpdb, когда искал в Google помощь. Так вот, я нигде не определял это, но место, которое я читал, казалось, предполагало, что оно было встроено.

Вся помощь признательна!

Спасибо

Author: RolandoMySQLDBA, 2012-11-15

2 answers

Да $wpdb встроен и загружается ядром WordPress при каждой загрузке страницы.

Я не вижу никакой критической проблемы с вашим кодом. Я собираюсь предложить некоторые улучшения, потому что я вижу некоторые места, где может пойти не так, но в основном это должно сработать. Это заставляет меня думать, что $article->heading не соответствует вставленному post_title. Итак...

Попробуйте нормализовать свой заголовок с помощью sanitize_title_with_dashes именно так WordPress создает почтовый слиток, а затем проверяет это вместо этого пуля.

global $wpdb;
        $query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_name = %s', sanitize_title_with_dashes($article->heading));
        $cID = $wpdb->get_var( $query );

Теперь ваш запрос ищет post_name, который является хвостом слага или постоянной ссылки, и я изменил $wpdb->query на $wpdb->get_var, так как вы ищете одну переменную, которую мы сохраняем в $cID.

Используйте лучшую проверку для вашего условного.

if ( !empty($cID) ) {

Однако это может быть совсем неправильным подходом. Загляните в API XML_RPC, упомянутый @kaiser. Он имеет возможности вставки сообщений.

 2
Author: s_ha_dum, 2012-11-15 15:43:59
 0
Author: Altef four, 2018-01-09 18:00:13