wp_update_post()函数使用方法及避免死循环

Wordpress 思享 400浏览
摘要:
该函数的作用是更新数据库中的文章。 该函数需要传入数据库中存在的文章 ID 才能正常工作。 在调用 wp_update_post() 之前,我们需要创建一个包含必要文章元素的数组,这与 wp_insert_post() 不同的是:这个函数只需要文章 ID 参数,其他不需要更新的内容 将保持不变。 同样,如果挂载到edit_attachment的函数中包含调用wp_update_post的函数,也会导致死循环。

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

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

wordpress

使用方法

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

推荐阅读

WordPress4.9分支最新版更新至4.9.26

WordPress其实很早之前就已经更新到6.x版本了,不过本博客一直使用4.9分支。幸运的是,这个版本的分支仍在更新中。该版本已于2024年1月31日更新至4.9.25版本。 下载链接 [下载]https://cn.wordpress.......

纯代码实现wordpress附件页面重定向到文章或首页

前几天发现wordpress网站有评论留言的回顾。结果一看就是附件页面的垃圾评论。这才发现原来wordpress上传的附件也会有对应的页面。难怪之前收录了很多附件页面,但是我的机器人禁止了,忘记了。本来以为会禁用,结果只找到了在线使用插件的方法。最后......

Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘fake_update_callback’

这是当一个被挂钩的函数名与挂钩关联不匹配时…这可能发生在重命名一个函数时,而不是在挂钩关联中重命名函数名时。如果强迫症受不了wordpress的主题提示,可以使用插件WP降级将版本设置为当前版本。...