在不使用wp_update_post()的情况下更改文章作者

时间:2021-03-10 作者:Álvaro Franz

在WP中更改帖子作者的标准或更明显的方法是使用wp_update_post() 功能,如所示this question.

但我有一个问题,描述如下:

// Inside the save_post attached callback

$arg = array(
    \'ID\' => $post_id,
    \'post_author\' => $whoever,
);
wp_update_post($arg); --> This fires the save_post hook --> Infinite loop 
这是一种特殊情况,我需要在save\\u post回调中进行更新。这将导致无限循环。(参见this similar case)

我想知道是否有另一种方法可以更新不触发save\\u post挂钩的帖子作者。

我知道我可以使用内置的author元数据库来实现这一点,但需求迫使我不要使用内置的author元数据库,我必须使用自定义元数据库来更新文章作者。

一种可能的解决方案是直接使用SQL:

UPDATE `wp_posts`
SET `post_author` = 2
WHERE `ID` = 1
可通过以下方式实现:

global $wpdb;
$wpdb->get_results("UPDATE `wp_posts` SET `post_author` = " . $int_author . " WHERE `ID` = " . $int_ID);
当然,之前要确保两个变量都包含数字。

有人知道更好的解决方案吗?

1 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

在少数需要执行类似操作的情况下,我使用了callback unattach update repattach方法,这在以前的Q&;A.Update post on savedeveloper docs comments.

function your_save_post_callback( $post_id, $post, $update ) {
    // unattach the callback
    remove_action(\'save_post\', \'your_save_post_callback\');

    // update post
    wp_update_post( $args );

    // reattach the callback
    add_action(\'save_post\', \'your_save_post_callback\');
}