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_actions Stores the number of times each action was triggered.
Список изменений
С версии 2.1.0 | Введена. |
Код did_action() did action WP 6.4.3
function did_action( $hook_name ) { global $wp_actions; if ( ! isset( $wp_actions[ $hook_name ] ) ) { return 0; } return $wp_actions[ $hook_name ]; }