Функция did_action()
в WordPress позволяет узнать, сколько раз конкретный хук был вызван в текущем запросе. Это может быть полезно для проверки, был ли уже выполнен определенный код, особенно если хук может запускаться несколько раз. did_action()
возвращает число вызовов события, а не количество функций, привязанных к этому событию через add_action()
.
did_action( string $hook_name ): int
Параметры
$hook_name
— (строка, обязательный) Название проверяемого события (хука).
Возвращаемое значение
Функция возвращает целое число — количество раз, которое указанное событие было вызвано. Обычно это значение составляет 0 или 1, но для событий, вызываемых несколько раз, может быть больше.
Пример 1: Отслеживание количества вызовов события
В этом примере показано, как did_action()
реагирует на вызовы do_action()
для одного и того же хука.
// Привязываем функцию к хуку 'custom_hook_name' (не влияет на did_action)
add_action( 'custom_hook_name', '__return_true' );
// Проверим, сколько раз вызывался 'custom_hook_name'
echo did_action( 'custom_hook_name' ); // Результат: 0
// Первый вызов хука
do_action( 'custom_hook_name' );
echo did_action( 'custom_hook_name' ); // Результат: 1
// Второй вызов хука
do_action( 'custom_hook_name' );
echo did_action( 'custom_hook_name' ); // Результат: 2
Пример 2: Выполнение кода, если хук еще не вызывался
С помощью did_action()
можно проверять, был ли уже вызван хук, и запускать код только в случае, если событие еще не произошло.
if ( did_action( 'my_custom_hook' ) === 0 ) {
// 'my_custom_hook' еще не вызывался, запускаем нужное действие.
perform_custom_action();
}
Пример 3: Добавление поля только при первом вызове хука
Функция did_action()
может быть полезной для добавления контента только при первом вызове хука. Например, добавим кастомное поле «Закрепить» в интерфейс быстрого редактирования записи и покажем его только при первом вызове.
function add_sticky_option() {
global $post;
// Проверяем, что тип записи соответствует нашему условию, и что хук вызывается в первый раз
if ( $post->post_type == 'reviews' && did_action( 'quick_edit_custom_box' ) === 1 ) {
?>
<fieldset class="inline-edit-col-right">
<div class="inline-edit-col">
<label class="alignleft">
<input type="checkbox" name="sticky" value="sticky" />
<span class="checkbox-title"><?php _e( 'Закрепить', 'textdomain' ); ?></span>
</label>
</div>
</fieldset>
<?php
}
}
add_action( 'quick_edit_custom_box', 'add_sticky_option' );
Пример 4: Условное выполнение при повторных вызовах хука
Можно также использовать did_action()
для контроля логики при повторных вызовах, например, запускать специфический код после определенного числа срабатываний хука.
function perform_action_after_multiple_triggers() {
if ( did_action( 'multiple_trigger_hook' ) === 3 ) {
// Выполняем действие при третьем вызове
send_alert_message();
}
}
add_action( 'multiple_trigger_hook', 'perform_action_after_multiple_triggers' );
// Пример вызова хука
do_action( 'multiple_trigger_hook' );
do_action( 'multiple_trigger_hook' );
do_action( 'multiple_trigger_hook' );
Заключение
Функция did_action()
— это полезный инструмент для контроля выполнения кода и предотвращения многократного выполнения определенных функций.