filters – Cómo usar el filtro de actualización _ {$ meta_type} _metadata para modificar el valor meta

Pregunta:

Estoy tratando de update_{$meta_type}_metadata filtro de update_{$meta_type}_metadata para modificar los metadatos de publicación y de usuario antes de la inserción de la base de datos.

Después de leer los documentos y el núcleo , me parece que el filtro debe devolver un null para que add_metadata función add_metadata . Sin embargo, esto significa que es imposible filtrar el $meta_value ya que devolver un valor no nulo $meta_value un cortocircuito en la función.

¿Que me estoy perdiendo aqui? Y, de manera más general, ¿cuál es el punto de tener el filtro cuando solo puede devolver null ?

Respuesta:

El fragmento de código en cuestión es:

$check = apply_filters( "update_{$meta_type}_metadata", 
    null, $object_id, $meta_key, $meta_value, $prev_value );
if ( null !== $check )
    return (bool) $check;

Este filtro solo le permite evitar la actualización de los metadatos para un tipo determinado, no cambiar explícitamente los metadatos en sí.

Si desea utilizar este filtro para modificar los metadatos, puede intentar, por ejemplo:

add_filter( 'update_post_metadata', 'wpse_163859', 10, 5 );
update_post_meta( $post_id = 123, 'test', 'ABCDEF' );

donde:

function wpse_163859( $check, $object_id, $meta_key, $meta_value, $prev_value )
{
    // Avoid infinite recursion:
    remove_filter( current_filter(), __FUNCTION__ ); 

    // Modify the meta value;
    $meta_value = strtolower( $meta_value ); 

    // Do something else ...

    // Update the modified value.
    update_post_meta( $object_id, $meta_key, $meta_value, $prev_value ); 

    // Return something else than null
    return true; 
}

Leave a Comment

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

web tasarım