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对象。

声明:本站带有” 原 “字文章,均为本站作者原创发布。原创文章任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站作者内容侵犯了原著者的合法权益,可联系我们进行处理。

文章来源 wpzhiku https://www.wpzhiku.com/codex/wp_update_post/

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 软件商用保障
    正版采购,正规版权
  • 终身SVIP
    一次购买,终身受益
  • 海量资源
    教程、主题、插件一应俱全
  • 高效学习
    多位资深大佬,坐台解答
  • 信用保证
    数百万站长和用户的选择