如何在WordPress中使用钩子将帖子状态从发布更改为草稿?

时间:2015-12-04 作者:Ghanashyam Naik

我想使用其id将已发布帖子的状态更改为草稿。

   add_action( \'save_post\', \'change_post_status\', 1 );
function change_post_status( $post_id ){
    $my_post = array(
        \'ID\' => 1,
        \'post_status\' => \'draft\',
    );
    // unhook this function so it doesn\'t loop infinitely
    remove_action(\'save_post\', \'change_post_status\');
    if( $post_id == 1 ){
        wp_update_post( $my_post );
    }
    // re-hook this function
    add_action(\'save_post\', \'change_post_status\');
}
我想将id=1的特定帖子的状态更改为草稿。它正在发挥作用,但会导致

已达到最大函数嵌套级别“100”,正在中止!

为什么会出现此错误?

我认为它是在更新或保存帖子时运行的,我只想运行独立于保存或更新操作的函数,如onwp_initwp_adminadmin_init 有没有可能换个钩子。

2 个回复
SO网友:jas

In your functions.php :

add_action(\'publish_post\', \'check_user_publish\', 10, 2);

function check_user_publish ($post_id, $post) {

    if($post_id == 1){
    $query = array(
        \'ID\' => $post_id,
        \'post_status\' => \'draft\',
    );
    wp_update_post( $query, true );

    }

}
SO网友:Nathan Johnson

要移除挂钩,它必须具有与添加挂钩时相同的优先级。添加优先级为1的\\u操作。如果要删除该操作,则需要以1的优先级删除它。看见the codex.

add_action( \'save_post\', \'change_post_status\', 1 );
function change_post_status( $post_id ){
  $my_post = array(
    \'ID\' => 1,
    \'post_status\' => \'draft\',
  );
  // unhook this function, making sure to use the same priority, so it doesn\'t loop infinitely
  remove_action(\'save_post\', \'change_post_status\', 1 );
  if( $post_id == 1 ){
    wp_update_post( $my_post );
  }
  // re-hook this function with the initial priority
  add_action(\'save_post\', \'change_post_status\', 1 );
}

相关推荐

OOP development and hooks

我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private