Фон: пользовательские сообщения (тип: Event) могут быть добавлены пользователем вручную (в этом случае метаданные hq_id отсутствуют, или автоматически (извлечены из другого источника) с помощью wp_insert_post () (в этом случае hq_id присутствует)).
Иногда сообщения могут иметь общие заголовки, поэтому перед вставкой сообщения проверяется, не существует ли сообщение определенного заголовка. Идея ниже:
Перед попыткой вставить сообщениепост из другого источника и слияние с постами, добавленными пользователями вручную, проверяется следующее:
Существует ли пост с таким же названием? a) Нет => Давайте вставим его (Конец)б) Да.
Если Да: есть ли у него метаданные hq_id и совпадает ли это с метаданным hq_id сообщения, которое нужно вставить.
a) Да => хорошо, это повторяющаяся запись, нет необходимости вставлять ее
b) Нет => запись с таким же названием существует, но hq_id не существует или отличается,так что это не дубликат.Давайте вставим его.
Это нормально, пока вы не запустите код снова.Кажется, что каждый раз добавляются записи, соответствующие условию 2b.
Для каждого повторного выполнения кода оба значения 2a и 2b имеют значение true.Я не уверен, почему он не выходит из оператора if после 2a, но все равно выполняет 2b.
Кроме того, как вы увидите, весь блок кода $ new_post / wp_insert_post должен быть перемещен в функцию какон используется дважды.Куда бы я поместил определение функции, чтобы у меня не было проблем с областью действия?
Вот код:
if( ! empty( $data_events ) ) {
echo '<ul>';
foreach( $data_events as $event ) {
$title_exists = get_page_by_title( $event['name'], OBJECT, 'event');
if ( $title_exists == null ) {
echo 'Post of the same title does not exist - we need to insert post';
$new_post = array(
'post_title' => $event['name'],
'post_content' => 'desssscccd',
'post_status' => 'publish',
'post_author' => '2',
'post_type' => 'event',
'meta_input' => array(
'hq_id' => $event['id'],
'hq_uri'=> $event['uri'],
)
);
$pid = wp_insert_post($new_post);
wp_set_object_terms($pid, 'riderhq', 'event_category');
} else { // A post of the same title exists
$my_post = get_page_by_title ( $event['name'], OBJECT, 'event' );
$post_hq_id = $my_post->hq_id;
if ( $post_hq_id && $post_hq_id == $event['id'] ) {
echo "post of the same title exists and has the same hq_id - no need to insert it";
} else {
echo "post of the same title exists but doesnt have the same hq_id - we need to insert it";
$new_post = array(
'post_title' => $event['name'],
'post_content' => 'description',
'post_status' => 'publish',
'post_author' => '2',
'post_type' => 'event',
'meta_input' => array(
'hq_id' => $event['id'],
'hq_uri'=> $event['uri'],
)
);
$pid = wp_insert_post($new_post);
wp_set_object_terms($pid, 'riderhq', 'event_category');
}
}
echo '<li>';
echo $event['id'];
echo '<a href="' . esc_url( $event['uri'] ) . '">' . $event['name'] . '</a>';
echo '</li>';
}
echo '</ul>';
}