更新已发布的帖子时添加要触发的操作

时间:2015-01-07 作者:niczak

我有几个动作设置:

add_action(\'publish_post\', array($this, \'newPost\'), 10, 2); 
add_action(\'post_updated\', array($this, \'updatePost\'), 10, 3);
当我更新已经发布的帖子时,会触发“newPost”方法,而不是“updatePost”方法。我想这是因为帖子已经发布了,那么在更新之前发布的帖子时,有什么好方法可以触发不同的方法(或者能够识别它是更新而不是新发布的帖子)?

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

或者,您可以使用“transition\\u post\\u status”挂钩来实现此目的。每当一个帖子的状态改变时,就会触发这个钩子。在您的情况下,您需要检查帖子的新旧状态是否相同,即publish

您还可以根据$post, 哪个是当前正在更新/发布的帖子等。

您可以尝试以下操作:

add_action(\'transition_post_status\', function ($new_status, $old_status, $post) {

   if ( $old_status == \'publish\' && $new_status == \'publish\' ) {
       //Do something when post is updated
   }

}, 10, 3 );

SO网友:Milo

您可以使用post status transition 为此执行的操作。

function wpd_updating_a_published_post( $post ){
    // do something
}
add_action( \'publish_to_publish\', \'wpd_updating_a_published_post\', 10, 1 );

SO网友:ifdion

您可以使用Milo的答案,也可以在挂钩函数中使用条件,然后比较post_date 以及post_modified.

add_action(\'save_post\', array($this, \'updatePost\'), 10, 3);

function updatePost($post_id){

// If this is just a revision, don\'t send the email.
if ( wp_is_post_revision( $post_id ) )
    return;

$post = get_post($post_id);

// Compare the date
if ($post->post_date == $post->post_modified){
    // Do something for a new post

} elseif ($post->post_date < $post->post_modified){
    // Do something for an updated post
}

结束

相关推荐

Multisite and plugins options

我需要更多关于get_site_option(), update_site_option() 和add_site_option().在codex中,他们说它与单次安装相同,只是在多站点中,它返回网络范围的选项。好吧,但我对这一点感到困惑:这是否意味着一旦设置了网络范围选项,所有站点的选项都是相同的?还是每个站点都会覆盖它?我的意思是如果我这样做: update_site_option(\'option_group\', \'default_options());// default_options() r