Duke Yin's Technology database

使用wp_update_post代替wp_publish_post

最近制作Keep Minutes网站的时候,遇到一个问题:

前端发布理所应当使用wp_insert_post(),但是同时需要将经纬度地理信息也一并添加进日志meta信息,如果wp_insert_post()里的array设为’post_status’ => ‘publish’,则可能会造成来不及将meta信息添加好,文章就发布了,meta信息就添加失败。所以只能先存一个草稿。

解决:使用wp_insert_post()创建一篇草稿(draft),添加上一些meta信息,并紧接着使用wp_publish_post()试图将这篇“草稿文章”发布出来

$post_id = wp_insert_post( array(
	'post_author'	=> $user_id,
	'post_title'	=> wp_strip_all_tags($post_content),
	'post_content'	=> $post_content,
	'tags_input'	=> strip_tags($tags),
	'post_status'	=> 'draft'
) );
add_post_meta($post_id, 'address', $address, true);
wp_publish_post( $post_id );

这倒是解决了meta信息添加失败的问题,但新的问题又来了,这样发布的文章缺失slug和时间日期,其原因是wp_publish_post()除了将文章状态由“草稿”改为“已发布”,并没有额外的操作,缺失了文章数据。

解决:使用使用wp_update_post代替wp_publish_post

wp_publish_post( $post_id );

改为

wp_update_post(array(
			'ID' => $post_id,
			'post_status' => 'publish',
		));

这样一来,发布文章的时候既不会缺失自定义meta信息,也不会缺失slug和时间信息。

总结:wp_publish_post()真的只会改变文章的发布状态,其他什么的不做,除非在此之后额外设置post_name, post_date_gmt;

wp_update_post()虽然代码繁琐一点,但对于将自动创建的draft文章发布出来是正确的解决方法。

# # # # #

发布评论

评论

标注 * 的为必填项。