更新帖子后,会触发一些挂钩:
'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
,是这里的错字,还是您原始代码中的错字?另外,在开发时启用调试。