9

我想从我的 wordpress 网站的前端创建一个帖子。

当人们添加具有相同 post_title 的帖子时,我希望该帖子得到更新,而不是创建新帖子。

我有以下内容:

if (!get_page_by_title($post_title, 'OBJECT', 'post') ){
$my_post = array(
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_insert_post( $my_post );

}

else {

$page = get_page_by_title($post_title);
$page_id = $page->ID;

$my_post = array(

   'ID' =>  $page_id,
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_update_post( $my_post );

}

以上工作正常,直到帖子标题相同。它仍然会在数据库中重复,甚至不会考虑“else”语句。

以上看起来不错,还是我做错了什么?

4

2 回答 2

13

如果您使用empty检查数组怎么办

请注意,即使帖子被删除,它也会获取数据库中的第一个帖子/页面项目。

$check_title=get_page_by_title($post_title, 'OBJECT', 'post');

//also var_dump($check_title) for testing only

if (empty($check_title) ){
$my_post = array(
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_insert_post( $my_post );

}

else {


$my_post = array(

   'ID' =>  $check_title->ID,
   'post_title'    => $post_title,
  'post_content'  => $post_content,
  'post_status'   => 'publish',
  'post_author'   => $post_author,
  'post_category' => $post_categories
);

wp_update_post( $my_post );

}
于 2013-07-12T15:15:58.747 回答
0

对于自定义帖子类型,将第一行更改为:

$check_title=get_page_by_title($post_title, 'OBJECT', 'my_custom_post_type');
于 2019-07-19T08:54:44.457 回答