问题描述
在 save_post
(wp_insert_post()
) 结束时,save_post
和 wp_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。