我正在开发一个增强的修订系统,以创建一个日志文件,记录用户和/或算法对附加到特定帖子类型的元数据所做的所有更改。
虽然我很清楚update_post_meta
适用于所有帖子类型,而update_postmeta
我的问题不取决于帖子的类型,也不包括update
零件,因为对于updated
, delete
, 等
检查后wp-includes/meta.php
, 我找到了前面提到的钩子来完成我的工作,但这给我提出了一个问题。
核心部分是版本4.4.2中的一行215:
foreach ( $meta_ids as $meta_id ) {
/**
* Fires immediately before updating metadata of a specific type.
*
* The dynamic portion of the hook, `$meta_type`, refers to the meta
* object type (comment, post, or user).
*
* @since 2.9.0
*
* @param int $meta_id ID of the metadata entry to update.
* @param int $object_id Object ID.
* @param string $meta_key Meta key.
* @param mixed $meta_value Meta value.
*/
do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
}
if ( \'post\' == $meta_type ) {
foreach ( $meta_ids as $meta_id ) {
/**
* Fires immediately before updating a post\'s metadata.
*
* @since 2.9.0
*
* @param int $meta_id ID of metadata entry to update.
* @param int $object_id Object ID.
* @param string $meta_key Meta key.
* @param mixed $meta_value Meta value.
*/
do_action( \'update_postmeta\', $meta_id, $object_id, $meta_key, $meta_value );
}
}
所以有一个钩子
update_post_meta
,
update_comment_meta
, 和
update_user_meta
. 紧接着调用另一个钩子-仅针对posts表,名为
update_postmeta
, 工作方式几乎完全相同,唯一的区别是
maybe_serialize()
传递meta\\u值的数据。
第204行:
$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );
起初我认为第二个钩子是为了向后兼容,但这两个钩子都是在2.9.0中引入的。
update_postmeta
和
update_{$meta_type}_meta
再看远一点,我也找到了我的另一个答案,三年前,这个话题也出现了,但这不是重点。
我错过什么了吗?
这到底是向后兼容吗?而且刚刚被移动到meta.php
在2.9.0中?或者有什么真正的理由同时拥有这两个吗?对我来说update_post_meta()
功能可以轻松maybe_unserialize()
数据,如果需要的话,所以我真的不认为两者都有意义。
期待您的意见!