Intereting Posts
Подсистемы сопоставления доменов дополнительного домена Mulsite Добавить идентификатор в целевую навигационную ссылку Импорт 10-летней информации в базу данных WP В чем смысл User-agent и Disallow в файле robots.txt в wordpress Загрузка страницы Ajax без перезагрузки как отключить проверку электронной почты на wp-admin / options-general.php multisite admin e-mail При каких обстоятельствах файл .maintenance не удаляется? Проверить форму в функции.php, отправить ошибки обратно в шаблон Получать сообщения по пользовательской таксономии URL для загрузки последней версии WP для других языков, кроме английского Получите все изображения в сообщении и комментариях, таких как Twitter до заголовка сообщения Настройка файлов cookie в WordPress Сообщение, которое заполняет себя (почти) автоматически, используя данные из импортированного файла excel WordPress Media Manager выбирает кнопку файла, как предотвратить скрытие? Как создать профиль пользовательского интерфейса с дружественной постоянной ссылкой и триггером 404

Предотвращение дублирования сообщений в wp_insert_post с помощью настраиваемых полей

Мои исходные ссылки – это что-то связанное с этим:

http://sample.com/entertainment/default.aspx?tabid=2305&conid=102950 http://sample.com/entertainment/default.aspx?tabid=2418&conid=104330 http://sample.com/entertainment/default.aspx?tabid=2429&conid=104264 http://sample.com/entertainment/default.aspx?tabid=2305&conid=102949 . . . 

Я кэширую содержимое формы. Я использую wp_insert_post для отправки кэшированного содержимого с исходного сайта на WordPress:

  $my_post = array( 'post_title' => "$title", 'post_content' => "$content", 'post_status' => 'draft', 'post_author' => 1, 'post_category' => array(1), ); wp_insert_post( $my_post ); 

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

Извините за мое плохое описание.

Чтобы сохранить ссылку в метатеге, вы можете использовать update_post_meta

например, например:

 $url = "http://sample.com/entertainment/default.aspx?tabid=2305&conid=102950" $my_post = array( 'post_title' => "$title", 'post_content' => "$content", 'post_status' => 'draft', 'post_author' => 1, 'post_category' => array(1), ); $post_id = wp_insert_post( $my_post ); update_post_meta($post_id,'source_link',$url); 

и для предотвращения вставки добавьте простую условную проверку:

 $args = array("meta_key" => "source_link", "meta_value" =>$url); $posts = get_posts($args); if (count($posts) < 0){ //add new post } 

 if (count($posts) < 0){ //add new post } 

не работает, измените его на

 if (empty($posts)){ //add new post } 

Это довольно странная проблема, с которой столкнутся все, особенно если они вызовут эту функцию внутри некоторого цикла <foreach> <for> <while> и т. Д.

Вы должны попробовать это

 if (!get_page_by_title($title, 'OBJECT', 'post') ){ $my_post = array('post_title' => $title, 'post_content' => 'Content', 'tags_input' => $tags, 'post_category' => array(2), 'post_status' => 'publish' ); $result = wp_insert_post( $my_post ); 

}

Обратите get_page_by_title функцию get_page_by_title которая определяет, существует или нет сообщение с тем же названием, если да, то оно не вызывает wp_insert_post .

Надеюсь, это поможет кому-то, кто борется с той же проблемой.

Возможно, если вы используете что-то вроде wpdb-запроса, включая wp_posts и wp_postmeta, которые ищут эту мета, прежде чем вставлять сообщение …

 $string = 'the_url.html'; $output = $wpdb->get_var($wpdb->prepare("SELECT count(id) FROM $wpdb->posts wpo, $wpdb->postmeta wpm WHERE wpo.ID = wpm.post_id AND wpm.meta_key = 'name_of_ur_meta' AND wpm.meta_value = '$string'")); if(empty($output)) { /* Insert your post */ } else { /* Update the post or do other thing */ }; 

Если проблема, в соответствии с одним ответом выше, заключается в том, что функция встречается в каком-то цикле, тогда классический – и менее ресурсоемкий – способ решения – ввести флаг.

 $ran_already_flag = false; {loop begins} if ( ! $ran_already_flag ) { $my_post = array('post_title' => $title, 'post_content' => 'Content', 'tags_input' => $tags, 'post_category' => array(2), 'post_status' => 'publish' ); $result = wp_insert_post( $my_post ); $ran_already_flag = true; } {loop ends} 

Если проблема заключается не в том, что функция запускается внутри какого-либо цикла, мне было бы интересно узнать, что это вызвало: возможно, функция прикреплена к крючку, который выполняется дважды в течение весь скрипт: Может быть, например, «update_post» выполняется дважды. В этом случае вы можете прибегнуть к одному из других вариантов, предложенных в других ответах, хотя они действительно представляют собой создание флагов другими способами (обозначенный заголовок столбца является флагом), и более простой вид переменной флага может передаваться вдоль если необходимо.

Не настраивайте пользовательские поля, чтобы исправить это, лучше попробовать:

 if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){ $post_id = wp_insert_post( $my_post ); }