为什么同时存在SAVE_POST和wp_INSERT_POST操作?

时间:2016-06-26 作者:Tim Malone

我刚意识到wp-includes/post.php (source), 在…的结尾wp_insert_post(), 两者save_postwp_insert_post 使用完全相同的参数依次调用操作:

3520  /**
3521   * Fires once a post has been saved.
3522   *
3523   * @since 1.5.0
3524   *
3525   * @param int     $post_ID Post ID.
3526   * @param WP_Post $post    Post object.
3527   * @param bool    $update  Whether this is an existing post being updated or not.
3528   */
3529  do_action( \'save_post\', $post_ID, $post, $update );
3530    
3531  /**
3532   * Fires once a post has been saved.
3533   *
3534   * @since 2.0.0
3535   *
3536   * @param int     $post_ID Post ID.
3537   * @param WP_Post $post    Post object.
3538   * @param bool    $update  Whether this is an existing post being updated or not.
3539   */
3540  do_action( \'wp_insert_post\', $post_ID, $post, $update );
它们之间什么都没有发生,所以使用其中一个或另一个似乎没有区别。

相同的冗余在下面的wp_publish_post() (source), 以及oldest tracked version of the file 还有同样的两个动作(谢谢toscho 用于指出这些)。

我错过什么了吗?为什么它们都在那里?如果我选择使用一个动作,是否有理由选择一个而不是另一个?

1 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

wp_insert_post was introduced in changeset 2887, 是为了修复bug #1681. 我找不到save_post hook的原始出处,但最近添加到corein changeset 3291, 与相关ticket #2063. 显然,它已经存在于1.5.2中(尽管版本控制does not support this theory) 并且需要添加回以进行备份。

所以显然,save_post 在1.5.0中添加,然后在2.0开发生命周期中以某种方式删除,然后wp_insert_post 后来添加到2.0开发生命周期中,最后,save_post 是在2.0生命周期的后期添加的,以便不破坏兼容性。

如果这是真的,那么它就不是不推荐使用的钩子,而是开发人员使用的事实上的默认钩子。

相关推荐

自定义发布类型的POST_ROW_ACTIONS

我正在使用this 在WordPress Admin中具有重复post函数的代码。但是,当我为自定义帖子类型添加过滤器时,如下所示:add_filter( \'directory_row_actions\', \'rd_duplicate_post_link\', 10, 2 ); (自定义帖子类型的注册名称为directory) - 它不会将其添加到条目标题下的操作行中。当我为帖子或页面执行此操作时,如下所示:add_filter( \'post_row_actions\', \'rd_dup