wp update post 更新数据库中的文章、页面或自定义文章类型

函数描述

此函数的作用是更新数据库中的文章(或页面或其他自定义文章类型),该函数需要传入一个数据库中存在的文章 ID 才能正常工作。

需要注意的是,文章更新时,现有文件将被复制一个文章版本,文章内容将会被新值替代,文章的分类方法、标签、关联到该文章的自定义字段等数据保持不变。

使用方法

<?php wp_update_post( $post, $wp_error ); ?>

参数

$post
(
array/object) (
可选) 代表一篇文章数组,数组元素和wp_posts数据表中的数据列是一对一关系。

默认:空数组
$wp_error
(
Boolean) (
可选) 失败时允许返回一个 WP_Error 对象。

默认: false

使用示例

调用 wp_update_post() 之前,我们需要创建一个包含必要文章元素的数组,和 wp_insert_post()不一样的是:此函数只有文章ID参数是必需的,其他不需要更新的内容将保持原样不变。

// 更新ID为 37 的文章
$my_post = array(
    'ID'           => 37,
    'post_title'   => '文章的新标题',
    'post_content' => '新的文章内容',
);

// 更新文章到数据库
wp_update_post( $my_post );

处理 $wp_error

如果你的更新没有起作用,可能出现了某些错误,这时候,设置 $wp_error 为 true 可以显示错误信息以便调试。

<?php
// 把网站部署到正式环境的时候,记得把调试信息隐藏掉。

wp_update_post( $current_item, true );						  
if (is_wp_error($post_id)) {
	$errors = $post_id->get_error_messages();
	foreach ($errors as $error) {
		echo $error;
	}
}
?>

分类目录

分类目录应该以分类ID数组的形式传入,即使只需要设置一个分类目录,该参数的值也必须为数组。

注意 – 死循环

当执行一个挂载到 save_post (比如一个自定义metabox)的action时,wp_update_post() 有可能会产生一个死循环,死循环产生的原因是 (1) wp_update_post() 调用了 save_post,文章版本生成时(2) save_post 又被调用了一次。

如果更新文章的过程中必须调用 save_post,,更新文章之前先检查一下 post_type 不是 'revision',以确保 $post 对象确实需要更新。

同理,如果挂载到 edit_attachment 的函数包含了一个调用wp_update_post的函数,也可以导致死循环。

要避免这个问题,更新文章之前先卸载save_post动作,更新完成之后,在把save_post动作添加上。如下面的演示代码:

<?php
function my_function( $post_id ){
	if ( ! wp_is_post_revision( $post_id ) ){
	
		// 先卸载save_post动作,以避免死循环
		remove_action('save_post', 'my_function');
	
		// 更新文章
		wp_update_post( $my_args );

		// 然后重新添加save_post动作
		add_action('save_post', 'my_function');
	}
}
add_action('save_post', 'my_function');
?>

定时文章

如果想使用 wp_update_post() 定时发布一篇文章,除非传入 $my_post->edit_date = true,参数,否则WordPress 将在更新草稿时忽略 post_date 参数。

返回值

(
integer)
更新成功,将返回文章ID,更新失败返回0,或$wp_error对象。
支付确认
需要支付
¥0
二维码刷新中