Insérer un nouvel élément dans le tableau avec 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()) );

Le résultat est

Array ( [0] => tax3 ) 

Je ne pouvais pas comprendre comment je peux insérer un nouvel élément dans ce tableau avec add_filter. Quelle est la bonne façon?

Ünsal Korkmaz
la source

Réponses:

12

Les filtres fonctionnent en appelant chacune des fonctions de rappel crochues (dans l'ordre de priorité). La valeur à filtrer est transmise à la première fonction de rappel. La valeur renvoyée de cette fonction de rappel est ensuite transmise au deuxième rappel, et la valeur renvoyée à partir de celle-ci est transmise au troisième et ainsi de suite, jusqu'à ce que tous les rappels raccordés aient été déclenchés. Quelle que soit la dernière valeur renvoyée (c'est-à-dire que la valeur filtrée ayant traversé tous les rappels) est alors considérée comme étant la valeur après l'application du filtre.

Dans l'exemple ci-dessus, chaque filtre ignore ce qui lui est transmis et renvoie simplement son propre nouveau tableau.

( Note latérale: évitez les fonctions anonymes comme rappels)

Essayer:

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
la source
existe-t-il une bonne raison de ne pas utiliser de fonctions anonymes pour les filtres si vous n'avez pas besoin d'utiliser remove_filter et si vous n'avez pas besoin d'appeler à nouveau cette fonction?
Ünsal Korkmaz
1
Eh bien, sa bonne pratique de ne pas les utiliser car 1. Amélioration de la lisibilité. 2. Code extensible. 3. Ils ne sont pas pris en charge en PHP 5.2. Et il n'y a aucun avantage à utiliser des fonctions anonymes.
Stephen Harris