更新帖子后,会触发一些挂钩:
'pre_post_update'是在更新帖子之前触发的操作,传递的参数为2:$post_ID并且$data是帖子表的所有其他数据库列的数组
'transition_post_status'是在更新时触发的钩子,并传递3个参数:$ new_post_status $old_post_status和$post(对象)。
- 然后,还有另外两个触发的转换挂钩,但是它们是动态命名的,这意味着触发的有效操作取决于新旧的发布状态。
"{$old_status}_to_{$new_status}"和"{$new_status}_{$post->post_type}"。首先传递唯一的post对象作为参数,第二次传递post id和post对象。在此处查找文档。
'edit_post'传递2个参数:$post_ID和$post(object)
'post_updated'传递3个参数:$post_ID,$post_after(更新后的发布对象),$post_before(更新前的发布对象)
- 另一个动态挂钩:
"save_post_{$post->post_type}"取决于帖子类型,例如对于标准帖子is 'save_post_post'和对于页面而言'save_post_page',此挂钩传递3个参数:$post_ID,$post(对象),$update并且是布尔值(true或false),在执行更新时为true事实上,首次保存帖子时也会触发此钩子。
save_post在更新和首次保存时都触发的' ',并传递与上一个挂钩相同的3个参数。
save_post_{$post_type}在更新和首次保存时均会触发的' ',并传递与上一个挂钩相同的前两个参数。
- 最后,您拥有'
wp_insert_post',它在更新和首次保存时均被触发,并传递与前2个挂钩相同的3个参数。
每次更新帖子时都会触发这些钩子,既可以通过后台的管理页面,也可以通过使用wp_update_post或wp_insert_post函数“手动”更新时触发。
当使用管理页面更新帖子时,还会触发其他挂钩,例如'update_post_redirect'或'post_updated_messages'。(见这个和这个 用法示例WPSE答案)。
请注意,如果您不想使用某些hooks参数,则必须在add_action调用中显式声明它。
例如,如果要使用挂钩的'$update'参数(即第三个参数),则'save_post'需要将其添加3为$accepted_args参数add_action(请参阅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已调用该方法,否则它将无效。
例如此代码:
wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );
不会执行任何操作,因为在触发钩子之后添加了操作。这很容易识别,在现实世界中代码并非总是如此。
save_post,是这里的错字,还是您原始代码中的错字?另外,在开发时启用调试。