WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта

did_action() WP 2.1

Получает число, сколько раз было вызвано указанное событие (хук).

Функция получает количество вызовов события, а не кол-во прикрепленных к событию функций. Т.е. она считает вызовы do_action(), а не add_action().

Обычно все события вызываются один раз. Но к вызову могут быть прикреплены несколько функций. Не надо путать этот момент. Обычно функция возвращает либо 0 либо 1.

Аналогичные функции:

  • current_filter() — получает название текущего события или фильтра.
  • current_action() — алиас (копия) функции current_filter().
  • doing_filter() — проверяет обрабатывается ли в текущий момент указанный хук.
  • doing_action() — алиас (копия) функции doing_filter().
  • did_action() — получает число, сколько раз сработал указанный хук.
1 раз — 0.0000001 сек (скорость света) | 50000 раз — 0.0001 сек (скорость света) | PHP 7.4.8, WP 5.7

Хуков нет.

Возвращает

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() WP 5.8

<?php
function did_action( $hook_name ) {
	global $wp_actions;

	if ( ! isset( $wp_actions[ $hook_name ] ) ) {
		return 0;
	}

	return $wp_actions[ $hook_name ];
}

Из метки: События (хуки)

Еще из раздела: Хуки: события, фильтры

2 коммента
    Войти