Вставить новый элемент в массив с помощью 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. И нет никаких преимуществ в использовании анонимных функций.
Стивен Харрис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.