问题描述

save_post(wp_insert_post()) 结束时,save_postwp_insert_post 动作都被一个接一个地称为完全相同的参数:wp-includes/post.php(source)

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 指出这些) 。

我错过了什么吗?为什么他们都在那里,如果我选择采取行动,是否有理由选择一个呢?

最佳解决方案

wp_insert_post was introduced in changeset 2887,并修复 bug #1681 。我找不到 save_post 钩子的原始来源,但最近才被添加到与 ticket #2063 相关的核心 in changeset 3291 中。显然,它已经存在于 1.5.2(尽管版本控制 does not support this theory),需要添加回 back-compat 。

显然,save_post 被添加到 1.5.0,然后在 2.0 开发生命周期中被删除,然后在 2.0 开发生命周期中加入 wp_insert_post,最后在 2.0 生命周期中加入 save_post,以免破坏 back-compat 。

而不是被弃用的钩子,你会期望这样一个钩子,如果这是真的,它成为开发人员使用的事实上的默认钩子。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。