doing_filter()
Перевіряє обробляється в даний момент зазначений хук (фільтр, подія).
Дозволяє визначити хук, який виконується зараз (момент виклику цієї функції). Функція не виведе нічого, якщо зараз виконується останній хук.
Функція може «зберігати» для перевірки відразу кілька назв хуків, коли, наприклад, один хук викликається з іншого. Див. Приклади.
Аналогічні функції:
- current_filter() — отримує назву поточної події чи фільтра.
- current_filter() .
- doing_filter() — перевіряє чи обробляється в даний момент зазначений хук.
- doing_filter() .
- did_action() – отримує число, скільки разів спрацював вказаний хук.
doing_action()
(дуже швидко) | 50000 разів – 0.01 сек
(швидкість світла) |
PHP 7.0.8, WP 4.5.3
Хуків немає.
Повертає
true|false
. true, якщо зазначений хук збігається з поточним виконуваним, false в іншому випадку.
Використання
if( doing_filter( $filter_name ) ){ // ... }
-
$filter
(рядок/null) -
Назву хука, який потрібно перевірити. Якщо вказати
null (нічого не вказати) то функція перевірить чи виконується в даний момент будь-який хук.
Типово: 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’.
нотатки
- Дивіться: current_filter()
- Дивіться: did_action()
- Global. Рядок[]. $wp_current_filter Current filter.
список змін
З версії 3.9.0 | Введено. |
Код doing_filter() 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); }