Action Hook

Коротко

Вид хука WordPress, который в заданный момент выполнения запускает все подключённые к нему функции и ничего не возвращает обратно в код.

Что такое «Action Hook»

Механизм состоит из двух половин. В ядре, теме или плагине стоит вызов do_action( 'имя', ...аргументы ) — это точка, где «что-то произошло». Сторонний код подписывается на неё через add_action(), и когда выполнение доходит до точки, WordPress по очереди вызывает всех подписчиков. Так плагины меняют поведение сайта, не трогая файлы ядра: обновление WordPress не сотрёт доработку.

Это одна из двух разновидностей хука WordPress. Вторая — фильтр, который получает значение и обязан его вернуть. Действию возвращать нечего: оно выполняет побочную работу — выводит HTML, пишет в базу, отправляет письмо.

Приоритет и число аргументов

У add_action( $hook, $callback, $priority, $accepted_args ) два необязательных параметра, о которых часто забывают. Приоритет по умолчанию равен 10: функции с меньшим числом выполняются раньше. Параметр $accepted_args по умолчанию равен 1 — если хук передаёт три значения, а вы не указали 3, функция получит только первое.

Чтобы отключить чужой обработчик, вызывают remove_action() с тем же именем функции и тем же приоритетом, что при подключении. Анонимную функцию так снять почти невозможно, поэтому в плагинах обработчики лучше делать именованными или методами класса.

Пример: своя точка расширения

Действия полезны не только для подписки на события ядра. В собственном плагине можно объявить точку, к которой потом подключится другой код:

// В плагине оплаты, после подтверждения платежа
do_action( 'myshop_order_paid', $order_id, $amount );

// В другом месте: уведомление менеджеру
add_action( 'myshop_order_paid', 'myshop_notify_manager', 20, 2 );
function myshop_notify_manager( $order_id, $amount ) {
    wp_mail( 'sales@example.ru', 'Оплата заказа ' . $order_id, 'Сумма: ' . $amount );
}

Как отладить

Функция has_action() показывает, подключён ли обработчик, did_action() — сколько раз точка уже сработала за запрос. Для наглядного списка всех хуков страницы удобен плагин Query Monitor.

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение