do_action() WP 1.2.0
Создает событие (зацепку для произвольной функции). Чтобы функция сработала в момент события её нужно подключить к этому событию с помощью функции add_action().
Кроме событий в WP есть еще фильтры (filters), принцип работы такой же. Разницы лишь в том, что фильтр должен вернуть полученную переменную, т.е. он фильтрует (изменяет) данные, а событие позволяет запустить пользовательскую функцию в момент срабатывания этого события. Фильтры запускаются функцией apply_filters()
ВАЖНО: Если не передать параметр в хук, то функция хука все равно получит один параметр со значением ''
(пустая строка).
add_action( 'action_name', function( $first ){ var_dump( $first ); } ); do_action( 'action_name' ); // выведет> string(0) ""
Хуков нет.
Возвращает
Null. Ничего не возвращает.
Использование
do_action( $tag, $arg_a, $arg_b, ... );
- $tag(строка) (обязательный)
- Название создаваемого хука.
- $arg_a(строка/массив/число/объект/логический)
- Значение аргумента, который будет передан.
По умолчанию: аргумент не существует - $arg_b(строка/массив/число/объект/логический)
- Значение еще одного аргумента...
По умолчанию: аргумент не существует - $arg_с(строка/массив/число/объект/логический)
- Функции можно передавать бесконечно много аргументов...
Примеры
#1. Пример использования
Эту функцию можно использовать в плагинах, темах и т.д., когда нужно внедрится в процесс выполнения кода, откуда-нибудь из другого места. Например, "зацепку" (хук) (do_action) мы установили в плагине, а "цепляться" за нее будем из файла functions.php в тот момент, когда будет срабатывать наша "зацепка".
Допустим, мы использовали такой код в плагине:
<?php // Определяем аргументы для хука action $a = $defined; // $defined какая-нибудь динамическая логическая переменная $b = 'А это значение второй переменной'; // Включаем хук. Здесь он будет выполняться do_action( 'my_hook', $a, $b );
Теперь мы может сделать какое-нибудь действие в момент срабатывания функции do_action и при этом описать наше действие можно, например, из файла functions.php, разместив в нем такой код:
function do_my_hook( $a, $b ){ // если переданная переменная $a равна true, // то, например, удалим запись 10 if( $a===true ) wp_delete_post(10); // а тут просто выведем переменную на экран echo '<br />'.$b; // выведет значение второй переменной } // Регистрируем хук через // add_action( $tag, $function_to_add, $priority, $accepted_args ); add_action( 'my_hook', 'do_my_hook', 10, 2 );
Действия отличаются от фильтров, тем что передаваемые действием данные, не возвращаются обратно в функцию и не используются там в дальнейшем, а всего-лишь передаются для использования в функции хука.
Заметки
- Global. WP_Hook[]. $wp_filter Stores all of the filters and actions.
- Global. Число[]. $wp_actions Stores the number of times each action was triggered.
- Global. Строка[]. $wp_current_filter Stores the list of current filters with the current one last.
Список изменений
С версии 1.2.0 | Введена. |
С версии 5.3.0 | Formalized the existing and already documented ...$arg parameter by adding it to the function signature. |