管理视图中的Wordpress更新后挂钩

时间:2016-03-09 10:39:54

标签: php wordpress

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

原因是,我必须调用一个函数来更新另一个插件的内容。

到目前为止我尝试过的所有东西都不起作用。

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
    }
  }
} 

1 个答案:

答案 0 :(得分:2)

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

  • 'pre_post_update' 之前触发的操作更新帖子后,传递的参数为2:$post_ID$data这是一个所有数组的邮件表
  • 的其他数据库列
  • 'transition_post_status' 是在更新时触发的钩子,并传递3个参数:$ new_post_status,$old_post_status$post(对象)。
  • 然后,还有其他2个过渡钩子被触发,但它们是动态命名的,这意味着触发的有效动作取决于旧的和新的帖子状态。 "{$old_status}_to_{$new_status}" "{$new_status}_{$post->post_type}" 。首先传递唯一的post对象作为参数,第二个传递post id和post对象。查找文档here
  • 传递2个参数的
  • 'edit_post' $post_ID$post(对象)
  • 传递3个参数的
  • 'post_updated' $post_ID$post_after(更新后发布对象),$post_before(更新前发布对象) )
  • 另一个动态挂钩: "save_post_{$post->post_type}" 取决于帖子类型,例如对于标准帖子是'save_post_post',对于页面是'save_post_page',此钩子传递3个参数:$post_ID$post(对象)和$update这是一个布尔值(当你执行更新时,这是真的,实际上当第一次保存帖子时也会触发此钩子。
  • 在更新和首次保存时触发的
  • &#39; save_post&#39; ,并传递前一个挂钩的相同3个参数。
  • &#39; save_post_{$post_type}&#39; 在更新和首次保存时都会被触发,并传递前一个钩子的前两个参数。
  • 最后你有&#39; wp_insert_post&#39; ,在更新和首次保存时都会被触发,并传递前2个钩子的相同3个参数。

每次更新帖子时都会触发这些钩子,无论是通过后端的管理页面还是通过更新后的手动页面,#34;手动&#34;使用wp_update_postwp_insert_post函数。

当使用管理页面更新帖子时,会触发其他挂钩,例如 'update_post_redirect' 'post_updated_messages' 。 (有关使用示例,请参阅thisthis WPSE答案。)

请注意,如果你想使用一些hooks参数,那就不是第一个,你需要在add_action调用中明确声明它。

E.g。如果您想使用'$update'挂钩的'save_post'参数(即第3个),则需要在3 $accepted_argsadd_action添加// 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 ); } 参数{3}}):

add_action

最后请注意计时:您必须确保在触发操作之前wp_update_post( $post ); add_action( 'save_post', 'my_function', 10, 3 ); 被称为,否则它将无效。

E.g。这段代码:

       $(window).scroll(function() {
            var distanceTop = $("#animate_blocks").offset().top - $(window).height();
            if ($(window).scrollTop() > distanceTop)
            {
               for ( var counter = 2; counter <= 7; counter++)
               {
                   $("#slidebox"+counter).animate({"bottom":"0px", "opacity": "1"},{duration: 500, easing: "easeOutQuart"});
               }
            }
            else
               for ( var counter = 2; counter <= 7; counter++)
               {
                   $("#slidebox"+counter).stop(true).animate({"bottom": "-300px", "opacity": "0"},200);
               }
        });

将不执行任何操作,因为在触发挂钩后添加操作。这很容易识别,在现实世界中,代码并非总是如此。