Функция did_action() в WordPress: как использовать и для чего.

DID_ACTION() │ WP 2.1.0

Функция did_action() позволяет узнать, сколько раз сработал определённый экшен (или хук) в WordPress. Это полезно, если вы хотите отслеживать выполнение какого-либо действия.

Что делает функция?

Она возвращает количество раз, сколько срабатывает экшен, а не количество функций, прикрепленных к этому экшену. То есть, счётчик будет учитывать do_action(), а не add_action().

Похожие функции

  • current_filter() — возвращает имя текущего фильтра или действия.
  • current_action() — это синоним к current_filter().
  • doing_filter() — проверяет, обрабатывается ли указанный хук в данный момент.
  • doing_action() — синоним к doing_filter().

Важно! Функция did_action() не работает с фильтрами. В версии WordPress 6.1 появилась новая функция did_filter() для этой цели.

Скорость выполнения

  • 1 срабатывание — 0.0000001 сек (скорость света)
  • 50000 срабатываний — 0.0001 сек (скорость света)
  • Примененные версии: PHP 7.4.8, WP 5.7

Возвращаемое значение

Функция возвращает целое число — количество срабатываний экшен-хука.

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

did_action( $hook_name );

Параметры

  • $hook_name (строка) (обязательный) — имя экшен-хука.

Примеры использования

Пример 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() можно использовать для того, чтобы выполнить что-то один раз, когда хук срабатывает в первый раз. Например, мы можем добавить пользовательское поле только во время первого вызова события:

function my_sticky_option(){
    global $post;

    if ( $post->post_type == 'films' && did_action( 'quick_edit_custom_box' ) === 1 ){ 
        ?>

        

Примечания

  • Глобальная переменная: $wp_actions хранит количество раз, когда каждый экшен был вызван.

Изменения

  • С версии 2.1.0: Функция была введена в WordPress.

Код функции

Функция did_action реализована следующим образом:


function did_action( $hook_name ) {
global $wp_actions;

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

return $wp_actions[ $hook_name ];

}

Связанные функции

ЭКШЕНЫ (ХУКИ)

  • add_action() — добавляет обработчик для экшена.
  • do_action() — вызывает все функции, прикреплённые к экшену.
  • do_action_ref_array() — вызывает все функции, прикреплённые к экшену, с передачей массива аргументов.
  • doing_action() — проверяет, выполняется ли данный экшен в текущий момент.
  • has_action() — проверяет, есть ли обработчик для данного экшена.
  • remove_action() — удаляет обработчик для экшена.
  • remove_all_actions() — удаляет все обработчики для экшена.

ХУКИ (ЭКШЕНЫ, ФИЛЬТРЫ)

  • add_filter() — добавляет обработчик для фильтра.
  • apply_filters() — применяет все функции, прикреплённые к фильтрам.
  • apply_filters_ref_array() — применяет все функции фильтра с передачей массива аргументов.
  • current_filter() — возвращает имя текущего фильтра.
  • doing_filter() — проверяет, выполняется ли данный фильтр в текущий момент.
  • has_filter() — проверяет, есть ли обработчик для данного фильтра.
  • remove_all_filters() — удаляет все обработчики для фильтра.
  • remove_filter() — удаляет обработчик для фильтра.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *