wp_update_post 更新数据库中的文章、页面或自定义文章类型
函数描述
这个函数的作用是更新数据库中的文章(或页面或其他自定义文章类型)。该函数需要传入一个数据库中存在的文章ID才能正常工作。
需要注意的是,文章更新时,现有文件将被复制一个文章版本。文章内容将会被新值替代,文章的分类方法、标签、关联到该文章的自定义字段等数据保持不变。
使用方法
<?php wp_update_post( $post, $wp_error ); ?>
参数
参数 | 数据类型 | 是否必需 | 描述 | 默认值 |
---|---|---|---|---|
$post | 数组|对象 | 否 | 文章数组或对象,数组元素和 wp_posts 数据表中的数据列是一对一关系 | [] |
$wp_error | 布尔值 | 否 | 允许失败时返回一个 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 可以显示错误信息以便调试。
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 动作添加上。如下面的演示代码:
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 对象。

-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
创建Vue组件详细教程 2023-09-10 00:23:17
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02
-
Astra 主题团队推出人工智能驱动的 WordPress 网站创建平台 – ZIPWP 2023-08-28 16:49:54
-
WordPress 宣布将为用户提供 100 年域名托管服务 2023-08-28 16:45:27
-
PHP判断if else 和 switch case的区别盘点 2023-07-29 15:11:11
-
详解WordPress独立站SEM中的OCPC方法(含百度推广OCPC与谷歌OCPC) 2023-07-19 08:01:30
-
WordPress的古腾堡全站编辑器site-editor.php介绍(附:site-editor.php启用代码) 2023-07-16 08:01:57