Tôi đang làm việc trên một hệ thống sửa đổi nâng cao, để tạo một tệp nhật ký cho tất cả các thay đổi được thực hiện bởi người dùng và / hoặc thuật toán liên quan đến siêu dữ liệu được đính kèm với các loại bài đăng cụ thể.
Trong khi tôi hoàn toàn nhận thức được rằng update_post_meta
công trình cho tất cả các bài loại, trong khi update_postmeta
chỉ hoạt động về bưu chính, câu hỏi của tôi không phụ thuộc vào loại bưu điện, và nó cũng không chỉ bao gồm các update
phần, vì nó là như nhau cho updated
, delete
vv
Sau khi kiểm tra wp-includes/meta.php
, tôi tìm thấy các móc được đề cập trước đó để hoàn thành công việc của mình, nhưng điều này đặt ra một câu hỏi cho tôi.
Phần trong lõi là một - dòng 215 trong Phiên bản 4.4.2:
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 );
}
}
Vì vậy, có một cái móc cho update_post_meta
, update_comment_meta
và update_user_meta
. Ngay sau đó, một hook khác được gọi - chỉ cho bảng bài viết, được đặt tên update_postmeta
, hoạt động gần như chính xác theo cùng một cách, với sự khác biệt duy nhất là maybe_serialize()
dữ liệu của meta_value được thông qua.
Dòng 204:
$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );
Lúc đầu, tôi nghĩ rằng hook thứ hai là có khả năng tương thích ngược, nhưng cả hai đều được giới thiệu trong 2.9.0. update_postmeta
vàupdate_{$meta_type}_meta
Nhìn xa hơn một chút, tôi cũng tìm thấy một câu trả lời khác của tôi, ba năm trước, nơi chủ đề này cũng xuất hiện, nhưng đây không phải là điểm chính.
Am i thiếu cái gì ở đây?
Đây có phải là khả năng tương thích ngược sau tất cả - và vừa được chuyển sang phiên bản meta.php
2.9.0? Hoặc có bất kỳ lý do thực sự để có cả hai? Đối với tôi, các hành động được nối với update_post_meta()
chức năng có thể dễ dàng maybe_unserialize()
lấy dữ liệu, nếu cần, vì vậy tôi thực sự không thấy điểm có cả hai.
Mong đầu vào của bạn!