当管理员更新帖子时,我需要一个钩子。(点击更新按钮(。帖子成功更新后。
原因是,我必须调用一个函数来为另一个插件更新一些东西。
到目前为止,我所尝试的一切都不起作用。
add_action( 'save_post', 'wpse41912_save_post' );
add_action( 'edit_post', 'wpse41912_edit_post' );
add_action( 'transition_post_status', 'wpse41912_transition_post_status' );
add_filter( "edit_post_{$field}", 'filter_edit_post_field', 10, 2 );
add_action( 'admin_head-post.php', 'admin_head_post_editing' );
add_action( 'admin_head-post-new.php', 'admin_head_post_new' );
add_action( 'admin_head-edit.php', 'admin_head_post_listing' );
在Everything函数中,我写了这个,但我没有看到回声或警报框。
echo "my_update_user_meta";
$text = "my_update_user_meta";
echo '<script type="text/javascript">alert("' . $text . '")</script>';
编辑:我缺少第3,4个参数。我的代码现在
add_action( 'save_post', 'mmx_save_post_action', 10, 3 );
function mmx_save_post_action( $post_id, $post, $update ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) { // keine Aktion bei Autosave
//autosave
}else{
//no autosave
if ( is_admin() && current_user_can( 'manage_options' ) ) {
//admin panel && permission ok
//call function
}
}
}
当帖子更新时,会触发一些挂钩:
-
'pre_post_update'
是在更新post之前触发的操作,传递的参数是2:$post_ID
和$data
,这是post表的所有其他数据库列的数组 -
'transition_post_status'
是更新时触发的挂钩,并传递3个参数:$new_postrongtatus、$old_post_status
和$post
(对象( - 然后,还有另外2个转换挂钩被触发,但它们是动态命名的,这意味着触发的有效操作取决于旧的和新的帖子状态。
"{$old_status}_to_{$new_status}"
和"{$new_status}_{$post->post_type}"
。首先只传递post对象作为参数,第二个传递post id和post对象。在此处查找文档 -
'edit_post'
传递两个参数:$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
',它在更新和第一次保存时都会触发,并传递前两个挂钩的相同3个参数
每次更新帖子时,都会触发这些钩子,既可以通过后端的管理页面,也可以通过使用wp_update_post
或wp_insert_post
函数"手动"更新。
当使用管理页面更新帖子时,会触发额外的挂钩,例如'update_post_redirect'
或'post_updated_messages'
。(有关用法示例,请参阅此和本WPSE答案(。
请注意,如果您想使用一些hook参数,这不是第一个,您必须在add_action
调用中显式声明它。
例如,如果要使用'save_post'
挂钩的'$update'
参数(即第三个(,则需要在add_action
上添加3
作为$accepted_args
参数(请参阅文档(:
// 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 );
将不会执行任何操作,因为该操作是在触发钩子之后添加的。这里很容易识别它,但在现实世界中,代码并不总是这样。