在更新POST时挂钩的正确方式是什么

时间:2014-02-14 作者:rusly

我尝试在帖子更新时挂起,但我尝试的所有挂起都从未执行,除非updated_post_meta

add_action(\'updated_post_meta\', \'my_function\');

function my_function($post_id) {    
    echo \'This is my post ID : \'.$post_id;
}
我试过这个add_action(\'save_post\', \'my_function\'); 但没有回显id,或者由于发送了重定向标头,此消息已经回显但从未呈现。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

更新帖子时,会触发一些挂钩:

  • \'pre_post_update\' 触发的动作是否before 帖子已更新,传递的参数为2:$post_ID$data 这是一个数组all post表的其他数据库列\'transition_post_status\' 是更新时触发的挂钩,并传递3个参数:$new\\u post\\u status,$old_post_status$post (对象)"{$old_status}_to_{$new_status}""{$new_status}_{$post->post_type}". 首先只传递post对象作为参数,第二次传递post id和post对象。查找文档here.
  • \'edit_post\' 传递2个参数:$post_ID$post (对象)\'post_updated\' 传递3个参数:$post_ID, $post_after (更新后发布对象),$post_before (更新前发布对象)另一个动态挂钩:"save_post_{$post->post_type}" 这取决于职位类型,例如,对于标准职位\'save_post_post\' 对于页面是\'save_post_page\', 此挂钩传递3个参数:$post_ID, $post (对象)和$update 这是一个布尔值(true或false),在执行更新时为true,事实上,在第一次保存帖子时也会触发此挂钩
  • \'save_post\' 它在更新和第一次保存时都被激发,并传递前一个钩子的相同3个参数
  • \'save_post_{$post_type}\' 它在更新和第一次保存时都被激发,并传递前一个钩子的前2个参数\'wp_insert_post\', 它在更新和第一次保存时都会激发,并传递前2个挂钩的相同3个参数
每次更新帖子时,都会触发这些挂钩,无论是通过后端的管理页面还是使用wp_update_postwp_insert_post 功能。

使用管理页面更新帖子时,会触发其他挂钩,例如\'update_post_redirect\'\'post_updated_messages\'. (参见thisthis WPSE回答使用示例)。

注意,如果您想使用一些hooks参数,这不是第一个,您必须在中显式声明它add_action 呼叫

E、 g.如果您想使用\'$update\' 参数(即第3个)\'save_post\' 需要添加的挂钩3$accepted_args 参数打开add_action (see docs):

// if you don\'t add 3 as as 4th argument, this will not work as expected
add_action( \'save_post\', \'my_save_post_function\', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = \'Is this un update? \';
  $msg .= $update ? \'Yes.\' : \'No.\';
  wp_die( $msg );
}
最后一个注意事项关于计时:您必须确保add_action 在触发操作之前调用,否则将不执行任何操作。

E、 g.本规范:

wp_update_post( $post );
add_action( \'save_post\', \'my_function\', 10, 3 );
不会执行任何操作,因为该操作是在激发挂钩后添加的。这里很容易识别,在现实世界中,代码并不总是这样。

SO网友:Jacob Rambo

为什么不加入呢post_updated_messages. 这样,您就可以像默认的wordpress帖子更新一样显示此消息。

add_filter(\'post_updated_messages\', \'your_message\');

function your_message(){
}
请在此处查找示例:

http://codex.wordpress.org/Function_Reference/register_post_type

在下面post_updated_messages

结束

相关推荐

如何使用PHP创建编号列表?

今天早上我的功能有点困难!这并不是特别的WP(更多PHP),但我认为它将在未来对WP开发人员有益,所以我在这里提问。我正在尝试创建一个列表,其功能如下:$items = get_post_meta($post->ID, \"item-specific-meta\"); $output = \'\'; foreach ($items as $item){ $item_id = $item[#] <--I WANT THIS TO BE A NUMBER $