Sự khác biệt giữa hook update_post_meta và update_postmeta là gì?


7

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_metacông trình cho tất cả các bài loại, trong khi update_postmetachỉ 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 updatephần, vì nó là như nhau cho updated, deletevv

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_metaupdate_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_postmetaupdate_{$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.php2.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!

Câu trả lời:


4

Cả hai đều được giới thiệu trong phiên bản 2.9, nhưng được thực hiện trong các tệp khác nhau.

update_postmeta đã đi vào /wp-admin/includes/post.php

Trong khi...

update_{$meta_type}_meta đã đi vào /wp-includes/meta.php

Chỉ sau đó update_postmetađã được chuyển vào /wp-includes/meta.php.

Vì vậy, tôi tin rằng đó là khả năng tương thích ngược, bởi vì update_postmetahook luôn nhận được giá trị của maybe_serialize()nó nên nó sẽ tiếp tục như vậy, mặc dù sau đó được chuyển vào /wp-includes/meta.php.

Hơn nữa, điều mà bạn có thể đã biết, nhưng vì lợi ích của người khác khi đọc, update_postmetahook trả về dữ liệu từ $_POST['meta']superglobal và khóa chứa dữ liệu từ bảng điều khiển trường tùy chỉnh .

Điều này có thể chỉ là một quyết định thiết kế kém? Hình như nó

Tôi nghĩ rằng tôi đã nhớ lại một số lý do khác xung quanh câu hỏi này liên quan đến việc tuần tự hóa dữ liệu kép, tuy nhiên tôi có thể bị lẫn lộn với một cái gì đó khác.

Thật thú vị, nếu bạn lưu trữ dữ liệu đã được tuần tự hóa trong văn bản UI Trường tùy chỉnh, WordPress sẽ tuần tự hóa lại trước khi lưu trữ, điều này hỗ trợ khái niệm khả năng tương thích ngược liên quan đến:

Lưu ý: câu trả lời này không hoàn thành .


0

Như nhận thấy trong Wordpress Codex, add_post_meta chèn postmeta mới liên quan đến một đường bưu điện. Nếu được cung cấp tham số "duy nhất" là đúng, sẽ kiểm tra khóa hiện có cùng tên. Nếu tồn tại, bỏ qua nó, nếu không, tạo và gán giá trị

update_post_meta sẽ cập nhật siêu dữ liệu và tạo các cặp khóa và giá trị mới, nếu được cung cấp meta_key.

Tốt nhất để sử dụng là gì? Nó phụ thuộc. update_post_meta phù hợp với hầu hết các tình huống, nhưng đôi khi add_post_meta sẽ hoàn thành công việc nếu bạn cần thêm siêu dữ liệu trong các môi trường được khôi phục (ví dụ: lưu trữ chia sẻ).

Vui lòng đọc để biết thêm thông tin: https://codex.wordpress.org/Function_Reference/update_post_metahttps://codex.wordpress.org/Function_Reference/add_post_meta

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.