Вставить новый элемент в массив с помощью 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()) );

Результат

Array ( [0] => tax3 ) 

Я не мог понять, как я могу вставить новый элемент в этот массив с помощью add_filter. Как правильно?

Юнсал Коркмаз
источник

Ответы:

12

Фильтры работают, вызывая каждую из перехваченных функций обратного вызова (в порядке приоритета). Фильтруемое значение передается первой функции обратного вызова. Возвращенное значение этой функции обратного вызова затем передается второму обратному вызову, а возвращаемое значение из этого передается третьему и так далее, пока не будут запущены все перехваченные обратные вызовы. Каким бы ни было последнее возвращенное значение (т. Е. Отфильтрованное значение, прошедшее через все обратные вызовы), затем принимается за значение после применения фильтра.

В приведенном выше примере каждый фильтр игнорирует то, что ему передано, и вместо этого просто возвращает свой новый массив.

( Примечание: избегайте анонимных функций в качестве обратных вызовов)

Пытаться:

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()) );
Стивен Харрис
источник
есть ли веская причина не использовать анонимные функции для фильтров, если вам не нужно использовать remove_filter и если вам не нужно снова вызывать эту функцию?
Юнсал Коркмаз
1
Хорошо, это хорошая практика, чтобы не использовать их, потому что 1. Улучшена читаемость. 2. Расширяемый код. 3. Они не поддерживаются в PHP 5.2. И нет никаких преимуществ в использовании анонимных функций.
Стивен Харрис