hooks – ¿Cuál es la diferencia entre los ganchos update_post_meta y update_postmeta?

Pregunta:

Estoy trabajando en un sistema de revisión mejorado, para crear un archivo de registro para todos los cambios realizados por los usuarios y / o algoritmos relacionados con los metadatos adjuntos a tipos de publicaciones específicas.

Si bien soy perfectamente consciente de que update_post_meta funciona para todos los tipos de publicaciones, mientras que update_postmeta solo funciona en la publicación, mi pregunta no depende del tipo de publicación, y tampoco solo cubre la parte de update , ya que es lo mismo para updated , delete etc.

Después de inspeccionar wp-includes/meta.php , encontré los ganchos mencionados anteriormente para hacer mis cosas, pero esto me planteó una pregunta.

La sección en el núcleo es esta línea 215 en la Versió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 );
    }
}

Entonces hay un gancho para update_post_meta , update_comment_meta y update_user_meta . Inmediatamente después de eso, se llama a otro gancho, solo para la tabla de publicaciones, llamada update_postmeta , que funciona casi exactamente de la misma manera, con la única diferencia de que se maybe_serialize() datos maybe_serialize() del meta_value.

Línea 204:

$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );

Al principio pensé que el segundo gancho está ahí por compatibilidad con versiones anteriores, pero ambos se introdujeron en 2.9.0. update_postmeta y update_{$meta_type}_meta

Mirando un poco más allá, también encontré otra respuesta mía, hace tres años, donde también surgió este tema, pero este no era el punto principal.

¿Me estoy perdiendo de algo?

¿Es esta compatibilidad con versiones anteriores, después de todo, y se acaba de mover a meta.php en 2.9.0? ¿O hay alguna razón real para tener ambos? Para mí, las acciones conectadas a la función update_post_meta() podrían fácilmente maybe_unserialize() los datos, si es necesario, por lo que realmente no veo el sentido de tener ambos.

¡Mirando hacia adelante a su entrada!

Respuesta:

Ambos se introdujeron en la versión 2.9, pero se hicieron en archivos diferentes.

update_postmeta entró en /wp-admin/includes/post.php

Mientras…

update_{$meta_type}_meta entró en /wp-includes/meta.php

Fue solo más tarde que update_postmeta se cambió a /wp-includes/meta.php .

Así que creo que fue por compatibilidad con versiones anteriores, porque debido a que el gancho update_postmeta siempre recibía el valor de maybe_serialize() entonces debería continuar haciéndolo, a pesar de que luego se movió a /wp-includes/meta.php .

Además, lo que quizás ya sepa, pero para que otros lean, el gancho update_postmeta devuelve datos de la clave y superglobal $_POST['meta'] que contiene datos del panel de campos personalizados .

¿Podría haber sido una mala decisión de diseño? Lo parece.

Pensé que recordaba alguna otra razón en torno a esta misma pregunta en relación con la doble serialización de datos, sin embargo, podría estar confundiéndome con otra cosa.

Curiosamente, si almacena datos ya serializados en el área de texto de la IU de campo personalizado, WordPress los serializará nuevamente antes de almacenarlos, lo que respalda la noción de compatibilidad con versiones anteriores en relación con:

Nota: esta respuesta no está necesariamente completa .

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım