Wordpress更新管理员视图中的帖子挂钩


Wordpress Update Post Hook in Admin View

当管理员更新帖子时,我需要一个钩子。(点击更新按钮(。帖子成功更新后。

原因是,我必须调用一个函数来为另一个插件更新一些东西。

到目前为止,我所尝试的一切都不起作用。

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_postwp_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 );

将不会执行任何操作,因为该操作是在触发钩子之后添加的。这里很容易识别它,但在现实世界中,代码并不总是这样。