Функция current_filter()
в WordPress позволяет получить имя текущего фильтра или действия, на котором выполняется код. Это может быть особенно полезно, когда одна и та же функция используется для нескольких хуков, и вы хотите динамически изменять поведение в зависимости от контекста вызова.
current_filter(): string
Возвращаемое значение
- string: Возвращает имя текущего фильтра или действия, если он вызван внутри функции, прикрепленной к этому фильтру.
Пример 1: Динамическое изменение заголовка электронной почты
function dynamic_mail_sender() {
// Проверяем, какой фильтр вызвал эту функцию
if ('wp_mail_from' === current_filter()) {
// Возвращаем адрес электронной почты администратора
return get_option('admin_email');
} elseif ('wp_mail_from_name' === current_filter()) {
// Возвращаем имя блога в качестве имени отправителя
return get_bloginfo('name');
}
}
// Подключаем фильтр для адреса отправителя и имени отправителя
add_filter('wp_mail_from', 'dynamic_mail_sender');
add_filter('wp_mail_from_name', 'dynamic_mail_sender');
Пример 2: Отладка и логирование фильтров
Функция current_filter()
также может быть полезна для отладки. Например, вы можете создать функцию, которая выводит в лог имя текущего фильтра, когда он срабатывает. Это может помочь в понимании, какие фильтры вызываются и в каком порядке.
function log_current_filter() {
$current_filter = current_filter();
error_log("Current filter: " . $current_filter);
}
// Добавляем функцию к нескольким фильтрам
add_filter('the_content', 'log_current_filter');
add_filter('the_excerpt', 'log_current_filter');
Когда активируется один из указанных фильтров, имя фильтра будет записано в журнал ошибок.
Пример 3: Условная логика в зависимости от фильтра
Можно использовать current_filter()
для реализации условной логики, чтобы изменить поведение функции в зависимости от того, какой фильтр вызвал ее.
function conditional_content_modification($content) {
if ('the_content' === current_filter()) {
return $content . '<p>This is additional content for the main content filter.</p>';
} elseif ('the_excerpt' === current_filter()) {
return $content . '<p>This is additional content for the excerpt filter.</p>';
}
return $content;
}
// Применяем фильтр к содержимому и аннотации
add_filter('the_content', 'conditional_content_modification');
add_filter('the_excerpt', 'conditional_content_modification');
В этом примере, если срабатывает фильтр the_content
, будет добавлено одно сообщение, а если the_excerpt
— другое. Это позволяет использовать одну функцию для обработки разных фильтров.
Пример 4: Проверка текущего действия
Хотя current_filter()
используется для получения имени фильтра, ее можно использовать в комбинации с другими функциями, такими как current_action()
, для проверки текущего действия.
function check_current_action() {
if ('init' === current_action()) {
echo 'The init action is being executed.';
}
}
// Добавляем функцию к действию
add_action('init', 'check_current_action');
Когда инициируется действие init
, будет выведено сообщение о том, что это действие выполняется.
Заключение
Функция current_filter()
является мощным инструментом для динамической работы с фильтрами в WordPress. Она позволяет создавать более адаптивный и эффективный код, который может реагировать на разные контексты вызова, делая ваши функции более универсальными. Благодаря этим примерам вы можете использовать current_filter()
для реализации различных сценариев в ваших проектах WordPress.