Inserisci un nuovo elemento nell'array 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()) );

Il risultato è

Array ( [0] => tax3 ) 

Non sono riuscito a capire come posso inserire un nuovo elemento in questo array con add_filter. Qual è il modo corretto?

Risposte:


12

I filtri funzionano chiamando ciascuna delle funzioni di callback agganciate (in ordine di priorità). Il valore da filtrare viene passato alla prima funzione di richiamata. Il valore restituito di quella funzione di callback viene quindi passato al secondo callback e il valore restituito da quello viene passato al terzo e così via, fino a quando tutti i callback agganciati non sono stati attivati. Qualunque sia l'ultimo valore restituito (ovvero il valore filtrato che ha attraversato tutti i callback) viene quindi considerato il valore dopo l'applicazione del filtro.

Nell'esempio sopra, ogni filtro ignora ciò che gli viene passato e invece restituisce il proprio nuovo array.

( Nota a margine: evitare funzioni anonime come richiamate)

Provare:

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()) );

c'è qualche buon motivo per non utilizzare funzioni anonime per i filtri se non è necessario utilizzare remove_filter e se non è necessario richiamare quella funzione?
Ünsal Korkmaz,

1
Bene, è buona norma non usarli perché 1. Migliore leggibilità. 2. Codice estensibile. 3. Non sono supportati in PHP 5.2. E non ci sono vantaggi nell'uso di funzioni anonime.
Stephen Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.