Функция DOING_FILTER() │ WP 3.9.0
Функция doing_filter() позволяет узнать, какой фильтр в данный момент обрабатывается в WordPress.
Зачем нужна эта функция?
- Функция
current_filter()возвращает только самый последний фильтр, который выполняется. - Функция
did_filter()сообщает, сколько раз фильтр был применён за текущий запрос.
С помощью doing_filter() вы можете определить, выполняется ли какой-либо фильтр в данный момент, независимо от того, является ли он последним в очереди.
Примеры использования
Синтаксис
doing_filter( $hook_name );
$hook_name(string|null) — имя фильтра, которое нужно проверить. По умолчаниюnull, что означает проверку на наличие любого выполняемого фильтра.
Возвращаемое значение
- Возвращает
trueилиfalse.true, если фильтр в данный момент выполняется.
Примеры работы
Пример 1: Проверка фильтра в действии
add_action( 'wp_head', function() {
doing_filter( 'wp_head' ); //> true
var_dump( doing_filter('wp_head') );
die;
});
Результат: Когда срабатывает действие wp_head, WordPress остановит выполнение, и на экран выведется bool(true).
Пример 2: Разные действия с одинаковым обработчиком
add_filter( 'wp_mail_from', 'filter_system_from_mail' );
add_filter( 'wp_mail_from_name', 'filter_system_from_mail' );
function filter_system_from_mail() {
if( doing_filter('wp_mail_from') )
$opt_name = 'admin_email';
else
$opt_name = 'blogname';
return get_option( $opt_name );
}
В этом примере функция filter_system_from_mail() изменяет адрес отправителя электронных писем в зависимости от того, какой фильтр был вызван.
Пример 3: Проверка родительского фильтра
add_filter( 'foo_filter', 'foo_filter_function' );
add_filter( 'bar_filter', 'bar_filter_function' );
echo apply_filters( 'foo_filter', 'Hello' ); //> Hello world!
function foo_filter_function( $text ) {
return apply_filters( 'bar_filter', $text );
}
function bar_filter_function( $text ) {
if( doing_filter('foo_filter') && doing_filter('bar_filter') ){
return "$text world!";
}
return 'Noooop!';
}
В этом примере показано, как doing_filter() может проверить, выполняются ли оба фильтра foo_filter и bar_filter одновременно.
Заметки
- Свидетельствующие функции:
current_filter()did_filter()
- Глобальная переменная:
$wp_current_filter— массив текущих фильтров.
История изменений
- Функция
doing_filter()была введена в версии 3.9.0.
Код функции
function doing_filter( $hook_name = null ) {
global $wp_current_filter;
if ( null === $hook_name ) {
return ! empty( $wp_current_filter );
}
return in_array( $hook_name, $wp_current_filter, true );
}
С помощью этой функции вы можете легко проверять, какие фильтры активны в вашем проекте на WordPress.