WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

doing_filter() WP 3.9.0

Проверяет обрабатывается ли в текущий момент указанный хук (фильтр, событие).

Позволяет определить любой хук, который выполняется в текущий момент, т.е. в момент срабатывания doing_filter(). Функция не выведет ничего, если в текущий момент выполняется последний хук.

Аналогичные функции:

  • current_filter() — получает название текущего события или фильтра.
  • did_action() — возвращает true, если хук уже сработал.

doing_action() - это копия doing_filter().

✈ 1 раз = 0.000012с = очень быстро | 50000 раз = 0.01с = скорость света PHP 7.0.8, WP 4.5.3

Хуков нет.

Возвращает

true/false. true, если указанных хук совпадает с текущим выполняемым, false в противном случае.

Использование

doing_filter ( $filter = null )
$filter(строка)
Название хука, который нужно проверить.
По умолчанию: null

Примеры

#1 Демонстрация

add_filter('wp_head', function(){
	var_dump( doing_filter('wp_head') );
	die;
});

/* Результат:
В момент срабатывания события wp_head, работа WP прервется и на экран будет выведено bool(true)
*/

#2 Разные действия в разных хуках, у которых одна функция обработчик

Пример показывает, как можно динамически изменить заголовок письма, в зависимости от того с какого фильтра срабатывает одна и та же функция (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 );
}

add_filter( 'wp_mail_from',      'filter_system_from_mail' );
add_filter( 'wp_mail_from_name', 'filter_system_from_mail' );

#3 Проверка родительского хука

doing_filter() умеет проверь выполняемый хук "по цепочке"...

Допустим, функция прикреплена к хуку foo_filter и она вызывает хук bar_filter. Внутри функции прикрепленной к хуку bar_filter нужно проверить, выполняется ли в текущий момент хук foo_filter.

add_filter('foo_filter', 'foo_filter_function');
add_filter('bar_filter', 'bar_filter_function');

function foo_filter_function($text){
	$text = apply_filters( 'bar_filter', $text );

	return $text . '!';
}

function bar_filter_function($text){
	// проверим выполнение сразу двух хуков, текущего (bar_filter) к которому прикреплена функция
	// и родительского (foo_filter) к которому прикреплена функция, которая вызвала текущий хук 'bar_filter'
	// т.е. на данный момент выполняются сразу 2 хука: 'foo_filter' и 'bar_filter' и функция
	// doing_filter() может проверить любой из выполняемых в данный момент хуков
	if( doing_filter('foo_filter') && doing_filter('bar_filter') )
		return $text . ' мир';

	return ''; // не сработает...
}

echo apply_filters( 'foo_filter', 'Привет' ); //> Привет мир!

Как видно из кода, в функции которая прикреплена к хуку bar_filter сработали оба условия:
doing_filter('foo_filter') и doing_filter('bar_filter'). Что значит что в текущий момент выполняются сразу 2 хука: 'foo_filter' и 'bar_filter'.

Код doing filter: wp-includes/plugin.php WP 4.8.1

<?php
function doing_filter( $filter = null ) {
	global $wp_current_filter;

	if ( null === $filter ) {
		return ! empty( $wp_current_filter );
	}

	return in_array( $filter, $wp_current_filter );
}

Cвязанные функции

Из метки: Фильтры (хуки)

Еще из раздела: Хуки: события, фильтры

СТО у нас

Описание СТО у нас.

ma.by

doing_filter Комментариев нет

Здравствуйте, !

Ваш комментарий