背景:自定义帖子(类型:事件)可以由用户手动添加(在这种情况下,不存在hq_id元数据),也可以由wp_insert_post()自动添加(从其他来源拉出)(在这种情况下,则存在hq_id) )。
有时帖子可以具有通用标题,因此在插入帖子之前检查是否存在特定标题的帖子是不够的。下面的想法是:
在尝试从其他来源插入帖子并将其与用户手动添加的帖子合并之前,请检查以下内容:
是否存在相同标题的帖子? a)否=>让我们插入它(结束) b)是的。
如果是:它是否具有hq_id元数据,并且与要插入的帖子的hq_id元数据相等。
a)是=>好的,这是重复的帖子,无需插入
b)否=>存在具有相同标题的帖子,但是hq_id不存在或不同,因此不是重复的帖子。让我们插入它。
很好,直到再次运行代码。每次似乎都添加满足2b条件的帖子。
对于每次重新运行代码,2a和2b均为真。我不确定为什么它在2a之后不退出if语句,但仍然会在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>';
}
答案 0 :(得分:0)
我已经稍微改变了方法,并解决了以下问题:
if( ! empty( $data_events ) ) {
function add_event($title, $id, $uri, $event_date) {
$new_post = array(
'post_title' => $title,
'post_content' => 'description',
'post_status' => 'publish',
'post_author' => '2',
'post_type' => 'event',
'meta_input' => array(
'hq_id' => $id,
'hq_uri'=> $uri,
'event_date' => $event_date,
)
);
$pid = wp_insert_post($new_post);
wp_set_object_terms($pid, 'riderhq', 'event_category');
$get_meta_time = get_post_meta($pid, 'event_date');
$newformat = date('Ymd', strtotime($get_meta_time[0]));
update_post_meta($pid, 'event_date', $newformat);
}
foreach( $data_events as $event ) {
$existing_posts_arguments = array(
'hierarchical' => 1,
'meta_key' => 'hq_id',
'meta_value' => $event['id'],
'post_type' => 'event',
);
$existing_posts = get_posts( $existing_posts_arguments );
if ( count($existing_posts) < 1 ) {
add_event($event['name'], $event['id'], $event['uri'], $event['start_date']);
}
} // end of foreach event
}