如何检查帖子是否存在于wp_insert_post之前以避免重复?
如果我删除'if'语句(post_exists())并继续插入会产生多个重复的帖子,则下面的代码将起作用。我用post_exists()编写了if语句只是为了开始执行检查的逻辑,但是当我添加if语句时,出现了问题,下面的列表甚至都没有打印出来。
$body = wp_remote_retrieve_body( $request );
$data = json_decode(utf8ize($body), true);
$data_events = $data['events'];
if( ! empty( $data_events ) ) {
echo '<ul>';
foreach( $data_events as $event ) {
// the if statement below seems to break things ie. no li below printed.
if ( post_exists( $event['name'] ) == 0 ) {
echo 'exists';
} else {
echo 'doesnt exist';
}
echo '<li>';
echo $event['id'];
echo '<a href="' . esc_url( $event['uri'] ) . '">' . $event['name'] . '</a>';
echo '</li>';
$new_post = array(
'post_title' => $event['name'],
'post_content' => 'description',
'post_status' => 'publish',
'post_author' => '2',
'post_type' => 'post',
'post_category' => array(1),
'meta_input' => array(
'hq_id' => $event['id'],
)
);
//wp_insert_post($new_post); // commented out while testing the if statement.
}
echo '</ul>';
}
?>
编辑:请参见$ data_events数组: https://pastebin.com/rC60iNyJ
答案 0 :(得分:1)
尝试此代码。您需要包含此文件。
因为post_exists
功能将在前端的管理页面中起作用。
if ( ! is_admin() ) {
require_once( ABSPATH . 'wp-admin/includes/post.php' );
}
$body = wp_remote_retrieve_body( $request );
$data = json_decode(utf8ize($body), true);
$data_events = $data['events'];
if( ! empty( $data_events ) ) {
echo '<ul>';
foreach( $data_events as $event ) {
// the if statement below seems to break things ie. no li below printed.
if ( post_exists( $event['name'] ) == 0 ) {
echo 'exists';
} else {
echo 'doesnt exist';
}
echo '<li>';
echo $event['id'];
echo '<a href="' . esc_url( $event['uri'] ) . '">' . $event['name'] . '</a>';
echo '</li>';
$new_post = array(
'post_title' => $event['name'],
'post_content' => 'description',
'post_status' => 'publish',
'post_author' => '2',
'post_type' => 'post',
'post_category' => array(1),
'meta_input' => array(
'hq_id' => $event['id'],
)
);
//wp_insert_post($new_post); // commented out while testing the if statement.
}
echo '</ul>';
}
答案 1 :(得分:1)
post_exists()
功能通常在前端不可用。您可以使用get_page_by_title
通过标题查找帖子,而不用包含其他文件。只需测试一个null
值以检查它是否不存在。
替换
if ( post_exists( $event['name'] ) == 0 ) {
与
if ( get_page_by_title( $event['name'] ) == null ) {