did_action()
Получает число, сколько раз было вызвано указанное событие (хук).
Функция получает количество вызовов события, а не кол-во прикрепленных к событию функций. Т.е. она считает вызовы do_action(), а не add_action().
Обычно все события вызываются один раз. Но к вызову могут быть прикреплены несколько функций. Не надо путать этот момент. Обычно функция возвращает либо 0 либо 1.
Аналогичные функции:
- current_filter() — получает название текущего события или фильтра.
- current_action() — копия функции current_filter().
- doing_filter() — проверяет обрабатывается ли в текущий момент указанный хук.
- doing_action() — копия функции doing_filter().
- did_action() — получает число, сколько раз сработал указанный хук.
- did_filter() — C WP 6.1. Получает число, сколько раз сработал указанный хук.
Хуков нет.
Возвращает
int. Сколько раз было вызвано указанное в $tag событие - сколько раз сработал хук.
Использование
$num = did_action( $tag );
- $tag(строка) (обязательный)
- Название события (действия, хука), которое будет проверяться.
Примеры
#1 Демонстрация работы
// эта строка никак не влияет на результат did_action() add_action( 'hook_name', '__return_true' ); echo did_action( 'hook_name' ); //> 0 do_action( 'hook_name' ); // первый вызов echo did_action( 'hook_name' ); //> 1 do_action( 'hook_name' ); // второй вызов echo did_action( 'hook_name' ); //> 2
#2 Сделаем что-нибудь, если указанный хук еще ни разу не сработал.
if( did_action( 'hook_name' ) === 0 ){
// хук 'hook_name' ни разу не сработал...
} #3 Выполним действие, если хук сработал только один раз
did_action() можно использовать, чтобы сделать что-либо только 1 раз, когда событие совершается впервые (хук срабатывает первый раз). Используем did_action(), чтобы убедиться что произвольное поле было добавлено только во время первого вызова события (событие может вызываться несколько раз). Все последующие вызовы события функция ничего делать не будет:
<?php
function my_sticky_option(){
global $post;
// Если это произвольный тип поста 'films' и хук quick_edit_custom_box выполняется первый раз
if ( $post->post_type == 'films' && 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( 'Featured (sticky)', 'textdomain_string' ); ?>
</span>
</label>
</div>
</fieldset>
<?php
} // endif;
}
// добавляем настройку sticky в поле быстрого редактирования нового типа постов.
add_action( 'quick_edit_custom_box', 'my_sticky_option' );
Заметки
- Global. int[].
$wp_actionsStores the number of times each action was triggered.
Список изменений
| С версии 2.1.0 | Введена. |
Код did_action() did action WP 7.0
function did_action( $hook_name ) {
global $wp_actions;
if ( ! isset( $wp_actions[ $hook_name ] ) ) {
return 0;
}
return $wp_actions[ $hook_name ];
}