Проверьте, существует ли уже должность с названием
Я пишу плагин, который принимает 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 помощь. Так вот, я нигде не определял это, но место, которое я читал, казалось, предполагало, что оно было встроено.
Вся помощь признательна!
Спасибо
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. Он имеет возможности вставки сообщений.
<?php post_exists( "post_name" ); ?>
Https://developer.wordpress.org/reference/functions/post_exists/