Функция doing_action()
в WordPress позволяет определить, выполняется ли в данный момент определённый хук действия. Это полезно для проверки состояния выполнения различных хуков, особенно когда ваши функции вызываются в контексте других хуков. В отличие от функции current_action()
, которая возвращает только последний выполненный хук, doing_action()
может проверить, выполняется ли в данный момент конкретный хук.
doing_action( string|null $hook_name = null ): bool
Параметры
- $hook_name (string|null) (опциональный): Название действия, которое нужно проверить. По умолчанию значение null, что означает проверку, выполняется ли какое-либо действие в данный момент.
Возвращает
Функция возвращает true
, если указанный хук совпадает с текущим выполняемым, и false
в противном случае.
Пример 1: Проверка выполнения конкретного действия
В этом примере мы проверим, выполняется ли хук save_post
, чтобы выполнить определённые действия только в этом случае.
add_action('save_post', function($post_id) {
if (doing_action('save_post')) {
// Выполняем действия, когда срабатывает хук save_post
error_log("Пост с ID {$post_id} сохраняется.");
}
});
Когда выполняется хук save_post
, в логи будет добавлено сообщение о сохранении поста.
Пример 2: Проверка, выполняется ли любое действие
Если мы хотим выполнить определённые действия, когда происходит любое действие, мы можем оставить параметр null
.
add_action('init', function() {
if (doing_action()) {
// Выполняем действия при инициализации
error_log("Выполняется какое-то действие.");
}
});
В этом случае лог будет записывать сообщение, когда срабатывает любое действие в процессе инициализации.
Пример 3: Комбинирование с другими функциями
Можно использовать doing_action()
в сочетании с другими функциями для более сложной логики. Например, мы можем проверить, выполняется ли определённый хук, и затем добавить или изменить функциональность.
add_action('wp_footer', function() {
if (doing_action('wp_footer')) {
echo '<p>Дополнительный контент внизу страницы.</p>';
}
});
Этот код добавит дополнительный контент в подвал сайта, когда срабатывает хук wp_footer
.
Пример 4: Проверка в различных контекстах
Иногда нужно проверить, выполняется ли хук в разных контекстах. Мы можем создать несколько хуков и проверить их с помощью doing_action()
.
add_action('custom_action_one', function() {
if (doing_action('custom_action_two')) {
echo "Выполняется custom_action_two внутри custom_action_one!";
}
});
add_action('custom_action_two', function() {
// Это будет вызывать custom_action_one, если его добавить
do_action('custom_action_one');
});
В этом примере, когда срабатывает custom_action_two
, он вызывает custom_action_one
. Внутри custom_action_one
проверяется, выполняется ли custom_action_two
, и если да, выводится сообщение.
Заключение
Функция doing_action()
в WordPress является мощным инструментом для проверки состояния выполнения хуков действий. Она позволяет разработчикам писать более динамичный и контекстно зависимый код, улучшая общую функциональность и взаимодействие с другими частями WordPress. Используйте её, чтобы улучшить свою логику работы с хуками и сделать свой код более адаптивным.