WordPress. Как работают хуки
В процессе загрузки WordPress происходит множество событий. К каждому из этих событий можно привязать функцию, которая выполнит какое-то действие (action
) или изменит данные (filter
). Разделение нужно, потому что по смыслу это разные вещи. Действие просто отрабытывает в нужный момент и ничего не возвращает, а фильтр — обрабатывает переданные данные и обязательно должен их вернуть.
Как работают хуки
Это упрощенный вариант реализации хуков, который наглядно показывает, как это работает:
$actions = array(); function add_action($hook, $function) { global $actions; if (!isset($actions[$hook])) { $actions[$hook] = array(); } $actions[$hook][] = $function; } function do_action($hook) { global $actions; if (isset($actions[$hook])) { foreach($actions[$hook] as $function) { call_user_func($function); } } }
Функция add_action()
назначает обработчик $function
для события $hook
. Функция do_action()
инициирует событие $hook
, после чего вызываются на выполнение все функции-обработчики этого события.
Примеры хуков-действий
// создадим функцию для хука function echo_one() { echo 'one'; } // привяжем функцию к хуку add_action('some_hook', 'echo_one'); // выполним хук do_action('some_hook'); // выведет «one»
// создадим функции для событий function echo_one($data) { echo $data[0]; } function echo_two($data) { echo $data[1]; } // привяжем эти функции к хуку add_action('some_hook', 'echo_one'); add_action('some_hook', 'echo_two'); // выполним хук do_action('some_hook', array('Привет', ' мир!') ); // выведет «Привет мир!»
Функция add_action()
add_action($hook, $function, $priority, $count);
Прикрепляет указанную функцию на указанный хук. Функция $function
сработает в момент события $hook
, которое в свою очередь запускается с помощью do_action()
.
Функция do_action()
do_action($hook, $arg1, $arg2, …);
Инициирует событие $hook
, к которому могут быть прикреплены произвольные функции. Чтобы функция сработала в момент события, её нужно подключить к этому событию с помощью функции add_action()
.
Примеры хуков-фильтров
// создадим функцию для хука function some_filter($str) { return 'Привет ' . $str . '!'; } // привяжем функцию к хуку add_filter('some_hook', 'some_filter'); // выполним хук $data = apply_filters('some_hook', 'мир'); // посмотрим, что получилось echo $data; // выведет «Привет мир!»
// создадим функцию для хука function crop_string($string) { return iconv_substr($string, 0, 6) . '…'; } // привяжем функции к хуку add_filter('prepare_string', 'strip_tags'); add_filter('prepare_string', 'crop_string'); // выполним хук $data = apply_filters('prepare_string', '<h1>Привет, мир!</h1>'); // посмотрим, что получилось echo $data; // выведет «Привет…»
Функция add_filter()
add_filter($hook, $function, $priority, $count);
Прикрепляет указанную функцию на указанный хук. Функция $function
сработает в момент события $hook
, которое в свою очередь запускается с помощью apply_filters()
.
Функция apply_filters()
apply_filters($hook, $value, $arg1, $arg2, …);
Инициирует событие $hook
, к которому могут быть прикреплены произвольные функции. Чтобы функция сработала в момент наступления события, её нужно подключить к этому событию с помощью функции add_filter()
.
Поиск: CMS • PHP • Web-разработка • Хук • Hook • Событие • Event • Функция • Function • Filter • Фильтр