doing_filter() WP 3.9.0

Перевіряє обробляється в даний момент зазначений хук (фільтр, подія).

Дозволяє визначити хук, який виконується зараз (момент виклику цієї функції). Функція не виведе нічого, якщо зараз виконується останній хук.

Функція може «зберігати» для перевірки відразу кілька назв хуків, коли, наприклад, один хук викликається з іншого. Див. Приклади.

Аналогічні функції:

  • current_filter() — отримує назву поточної події чи фільтра.
  • current_filter() .
  • doing_filter() — перевіряє чи обробляється в даний момент зазначений хук.
  • doing_filter() .
  • did_action() – отримує число, скільки разів спрацював вказаний хук.
Основа для:
doing_action()
1 раз – 0.000012 сек
(дуже швидко) | 50000 разів – 0.01 сек
(швидкість світла) |
PHP 7.0.8, WP 4.5.3

Хуків немає.

Повертає

true|false. true, якщо зазначений хук збігається з поточним виконуваним, false в іншому випадку.

Використання

if( doing_filter( $filter_name ) ){
	// ...
}
$filter
(рядок/null)
Назву хука, який потрібно перевірити. Якщо вказати
null (нічого не вказати) то функція перевірить чи виконується в даний момент будь-який хук.


Типово: null

Приклади

0

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

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

/* Результат:
У момент спрацювання події wp_head робота WP перерветься і на екран буде виведено bool(true)
*/
0

#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' );
0

#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’.

нотатки

список змін

З версії 3.9.0Введено.

Код doing_filter() WP 6.0.2

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);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *