Inserte un nuevo elemento en la matriz con add_filter

8
add_filter('example_filter', function(){ return array( 'tax1' ); } );
add_filter('example_filter', function(){ return array( 'tax2' ); } );
add_filter('example_filter', function(){ return array( 'tax3' ); } );

print_r( apply_filters( 'example_filter', array()) );

El resultado es

Array ( [0] => tax3 ) 

No pude descubrir cómo puedo insertar un nuevo elemento en esta matriz con add_filter. ¿Cuál es la forma correcta?

Ünsal Korkmaz
fuente

Respuestas:

12

Los filtros funcionan llamando a cada una de las funciones de devolución de llamada enganchadas (en orden de prioridad). El valor a filtrar se pasa a la primera función de devolución de llamada. El valor devuelto de esa función de devolución de llamada se pasa a la segunda devolución de llamada, y el valor devuelto se transfiere a la tercera y así sucesivamente, hasta que se hayan activado todas las devoluciones de llamada enganchadas. Cualquiera que sea el último valor devuelto (es decir, el valor filtrado que ha pasado a través de todas las devoluciones de llamada) se toma como el valor después de que se haya aplicado el filtro.

En el ejemplo anterior, cada filtro ignora lo que se le pasa y, en cambio, solo devuelve su propia matriz nueva.

( Nota al margen: evitar funciones anónimas como devoluciones de llamada)

Tratar:

add_filter('example_filter', 'my_example_filter_1' );
function my_example_filter_1( $array ){
    $array[]='tax1';
    return $array;
}
add_filter('example_filter', 'my_example_filter_2' );
function my_example_filter_2( $array ){
    $array[]='tax2';
    return $array;
}
add_filter('example_filter', 'my_example_filter_3' );
function my_example_filter_3( $array ){
    $array[]='tax3';
    return $array;
}

print_r( apply_filters( 'example_filter', array()) );
Stephen Harris
fuente
¿Hay alguna buena razón para no usar funciones anónimas para los filtros si no necesita usar remove_filter y si no necesita volver a llamar a esa función?
Ünsal Korkmaz
1
Bueno, es una buena práctica no usarlos porque 1. Legibilidad mejorada. 2. Código extensible. 3. No son compatibles con PHP 5.2. Y no hay beneficios al usar funciones anónimas.
Stephen Harris