Функция doing_filter()
в WordPress предназначена для проверки, выполняется ли в данный момент определённый фильтр. Она позволяет определить состояние выполнения фильтров и может быть полезна, когда требуется понять, какой фильтр выполняется в данный момент, даже если он не является последним.
В отличие от функции current_filter()
, которая возвращает только последний выполняемый фильтр, doing_filter()
может проверять состояние выполнения фильтров, которые могут вызываться из других хуков.
doing_filter( string|null $hook_name = null ): bool
Параметры
- $hook_name (string|null) (опциональный): Название фильтра, который нужно проверить. Если не указано, функция проверяет, выполняется ли в данный момент какой-либо фильтр.
Возвращает
Функция возвращает true
, если указанный фильтр совпадает с текущим выполняемым, и false
в противном случае.
Пример 1: Проверка выполнения конкретного фильтра
В этом примере мы проверим, выполняется ли фильтр wp_head
, чтобы отладить или добавить специфическую функциональность.
add_filter('wp_head', function() {
if (doing_filter('wp_head')) {
echo '<!-- Фильтр wp_head активен! -->';
}
});
Когда фильтр wp_head
сработает, в HTML-коде будет добавлен комментарий, подтверждающий его выполнение.
Пример 2: Динамическая обработка фильтров
В данном примере мы используем один и тот же обработчик фильтров для динамического изменения заголовка письма в зависимости от выполняемого фильтра.
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()
может также проверять, выполняются ли родительские хуки. В этом примере функция, прикрепленная к 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) {
if (doing_filter('foo_filter') && doing_filter('bar_filter')) {
return $text . ' мир';
}
return ''; // Возвращает пустую строку, если условия не выполнены
}
echo apply_filters('foo_filter', 'Привет'); //> Привет мир!
Здесь функция bar_filter_function
проверяет, выполняются ли оба фильтра, и, если это так, возвращает строку, добавляя слово «мир».
Заключение
Функция doing_filter()
является полезным инструментом для работы с фильтрами в WordPress. Она позволяет разработчикам проверять состояние выполнения фильтров, что делает код более гибким и адаптивным к различным контекстам. Используйте doing_filter()
для улучшения логики обработки хуков и создания более динамичного и контекстуального кода.