did_action

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

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

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

✈ 1 раз = 0.000013с = очень быстро | 50000 раз = 0.01с = скорость света PHP 7.0.5, WP 4.5.2

Хуков нет.

Возвращает

Число. Сколько раз было вызвано указанное в $tag событие – сколько раз сработал хук.

Использование

<?php did_action( $tag ); ?>
$tag(строка) (обязательный)
Название события (действия, хука), которое будет проверяться.
По умолчанию: нет

Примеры

#1 Демонстрация работы did_action()

// эта строка никак не влияет на результат 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' );

Код из


wp-includes/plugin.php

WP 4.7.2

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

	if ( ! isset( $wp_actions[ $tag ] ) )
		return 0;

	return $wp_actions[$tag];
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *