Inserir novo elemento na matriz com 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()) );

O resultado é

Array ( [0] => tax3 ) 

Eu não conseguia descobrir como inserir um novo elemento nessa matriz com o add_filter. Qual é a maneira correta?

Ünsal Korkmaz
fonte

Respostas:

12

Os filtros funcionam chamando cada uma das funções de retorno de chamada em gancho (em ordem de prioridade). O valor a ser filtrado é passado para a primeira função de retorno de chamada. O valor retornado dessa função de retorno de chamada é então passado para o segundo retorno de chamada e o valor retornado é passado para o terceiro e assim por diante, até que todos os retornos de chamada conectados tenham sido acionados. Qualquer que seja o último valor retornado (ou seja, o valor filtrado que passou por todos os retornos de chamada) é considerado o valor após a aplicação do filtro.

No exemplo acima, cada filtro está ignorando o que é passado para ele e, em vez disso, está retornando sua própria nova matriz.

( Nota: evite funções anônimas como retornos de chamada)

Tentar:

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
fonte
existe algum bom motivo para não usar funções anônimas para filtros se você não precisar usar o remove_filter e se não precisar chamar essa função novamente?
Ünsal Korkmaz
11
Bem, é uma boa prática não usá-los porque 1. Melhor legibilidade. 2. Código extensível. 3. Eles não são suportados no PHP 5.2. E não há benefícios em usar funções anônimas.
Stephen Harris