¿Tengo que agregar_filtro() antes de aplicar_filtros() en WordPress?

3 minutos de lectura

Estoy tratando de entender el complemento de WordPress como:

apply_filters( ‘gettext’, $traducciones->translate( $texto ), $texto, $dominio );

Estoy buscando todos los códigos en WordPress, no puedo encontrar:

add_filter(‘obtenertexto’, ….);

¿Por qué no hay add_filter para este complemento? ¿O me perdí algo? Lo mismo como:

hacer_acción(‘wp_loaded’);

no puedo encontrar:

add_action(‘wp_loaded’, ….);

apply_filters es como, ‘si hay algún filtro con este nombre, ejecute las devoluciones de llamada adjuntas con estos parámetros’. Entonces si no hay add_filter para ese nombre, significa que no hay ningún filtro que se vaya a ejecutar con el apply_filters llamar en este momento.

Lo mismo pasa con do_action y add_action.

  • Gracias la respuesta. Estaba pensando que debería ser como lo que dices. Sin embargo, estaba confundido con WordPress, sigue usando apply_filters. Como en class-http.php, hay: return apply_filters(‘use_http_extension_transport’, function_exists(‘http_request’), $args ); ¿Por qué simplemente devuelven function_exists(‘http_request’) ?

    – wordpresspregunta

    23 de marzo de 2011 a las 8:37


  • if there are any filters with this name, run the attached callbacks with these parameters – ¿Dónde se dice en el sitio doc de wordpress?

    –Istiaque Ahmed

    16 mayo 2017 a las 10:52

avatar de usuario
lam le

Soy un principiante en PHP: la pila de WordPress también, pero esto es según tengo entendido.

Los complementos llaman apply_filters sin tener ninguno add_filter en sus códigos es para permitir que los usuarios del sitio web agreguen lógica personalizada a sus complementos. Nosotros, los usuarios, podemos agregar nuestra propia función y usar add_filter para registrar nuestras funciones.

Por ejemplo, este fragmento de código es del complemento. Normalmente, muestra todos los productos, pero nos proporciona una forma de no mostrar un producto específico.

// Plugin's

if (apply_filters( 'plugin_show_products', true, $product->get_id() ) ) {
    $this->show_products();
}

Entonces, si nosotros, los usuarios, queremos personalizar un poco. Podemos agregar nuestra propia función de la siguiente manera (tal vez en functions.php)

// Our custom changes
function my_own_changes($boolean, $product_id) {
    if ( $product_id === 5 ) return false;
    return true;
}
add_filter( 'plugin_show_products', 'my_own_changes', 10, 2 );

Esto se traduce en: ¡El complemento se comportará normalmente pero para mi propio sitio, no mostrará el producto con ID de 5!

Me he encontrado con este tipo de código en un complemento o tema donde el apply_filter se utiliza sin tener necesariamente un filter o add_filter

En este caso, donde el apply_filters se usa sin un filtro, tendrá que volver a llamar a la función donde desea ejecutarla. Por ejemplo, en la cabecera de un tema.

El siguiente es un ejemplo de filtros de aplicación utilizados en una función que se llama de nuevo en el header.php

if ( ! function_exists( 'header_apply_filter_test' ) ) {

    function header_apply_filter_test() {

        $filter_this_content = "Example of content to filter";

        ob_start();

            echo $filter_this_content; 

        $output = ob_get_clean();

        echo apply_filters( 'header_apply_filter_test', $output );//used here 
    }
}

Ahora en el header.php archivo, tendría que llamar a esta función ya que no está enganchada en ninguna parte. Entonces, en este caso, para mostrar la salida en el encabezado, llamaría a la función de esta manera:

<?php  header_apply_filter_test(); ?>

También podría escribir este código con un enlace y haría lo mismo, es decir, mostrar el resultado en el encabezado.

add_filter('wp_head', 'header_apply_filter_test');

if ( ! function_exists( 'header_apply_filter_test' ) ) {

        function header_apply_filter_test() {

            $filter_this_content = "Example of content to filter";

            ob_start();

                echo $filter_this_content; 

            $output = ob_get_clean();

            echo $output; 
        }
    } 

Para esta segunda opción, aún tendría la capacidad de usar apply_filters en cualquier otro lugar para llamar a la función de devolución de llamada header_apply_filter_test() ya que el filtro ahora existe.

Así que, en mi opinión, el resultado final es una caso de uso ya que cualquier enfoque funciona!

¿Ha sido útil esta solución?