Что такое хуки в WordPress и как с ними работать?

8 May
Хуки на WordPress
Хуки на WordPress
Хуки на WordPress

Хуки в WordPress это довольно интересная тема для обсуждения. Что делают хуки? Давайте сначала разберемся для чего они нужны и какую функцию выполняют. Хук в переводе с английского это крюк на который как бы цепляется некоторая пользовательская функция в WordPress.

Как работают хуки в WordPress?

У некоторых функций WordPress есть хуки то есть события. Например если взять основные функции WordPress, такие как: wp_head.php, wp_content.php, wp_footer.php. У этих функций есть так называемые ( хук - событие ).

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

Фильтры и события в WordPress

Что такое фильтры и события, скажете вы? На первый взгляд кажется, что для понимания, это сложно но это не так. И мы в этом сегодня разберемся.

Функции add_filter() и add_action() - как раз и работают с хук - событиями. Работают функции совершенно одинаково. Разница заключается только в логике работы. Фильтры перехватывают события выполняют какие либо действия и возвращают его назад. События же работают также только ни чего не возвращают.

Параметры функции add_filters()

Здесь мы рассмотрим функцию add_filters() и разберем какие параметры она использует.

add_filters($hook_name, $function, $priority, $args_num); - прикрепляет пользовательскую функцию к хуку - фильтру и использует четыре параметра - $hook_name, $function, $priority и $args_num.

$hook_name(строка) (обязательный) Имя хука - события, для которого срабатывает функция в параметре $function_to_add.

$function(строка) (обязательный) Имя функции, которая срабатывает для указанного в параметре хука - события. Имя функции указывается в виде строки взятое в кавычках: 'название_функции'. Для функций внутри классов указывается массив: array('название_класса', 'название_функции').

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

$args_num(число) Количество аргументов передаваемых фильтром функции. Некоторые фильтры могут передавать больше чем 1 аргумент.

Параметры функции apply_filter()

Так же разберем функцию apply_filter() и её параметры.

apply_filter($hook_name, $value, $args); - выполняет пользовательскую функцию через хук - фильтр и использует четыре параметра - $hook_name, $value, $args.

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

$value(строка/массив/число/объект/логический) (обязательный) Значение, которое передается функции в первом её аргументе. Другими словами - значение, которое необходимо отфильтровать.

$args(строка/массив/число/объект/логический) Дополнительные значения, которые будут передаваться функции.

Пример работы фильтров

Рассмотрим пример работы фильтров по небольшим кусочкам кода для более легкого понимания.

Функция по удалению html - тегов из текста
Функция по удалению html - тегов из текста
Функция по удалению html - тегов из текста
Функция обрезающая текст до указанной величины
Функция обрезающая текст до указанной величины
Функция обрезающая текст до указанной величины
Функция выполняющая вывод отформатированного текста
Функция выполняющая вывод отформатированного текста
Функция выполняющая вывод отформатированного текста
Изначально текст был таким: "Есть <b>много</b> различных определений, что такое гений." - и в тексте были html - теги. После работы фильтра мы получили следующий текст: "Есть много различных определен..."

Данный пример показывает как с помощью фильтра можно изменить данные основной функции за ее пределами.

Параметры функции add_action()

add_action($hook_name, $function, $priority, $args_num); - прикрепляет пользовательскую функцию к хуку - событию и использует четыре параметра - $hook_name, $function, $priority и $args_num.

$hook_mame(строка) (обязательный) - Имя хука - действия, к которому будет цепляться функция.

$function(строка/замыкание) (обязательный) - Имя функции, которая должна быть вызвана во время срабатывания события.

$priority(число) - Приоритетное выполнение функции. На хук может быть прицеплено до нескольких функций. Приоритетность функций решает последовательность их выполнения. Чем меньше число тем раньше выполняется функция.

$args_num(число) - Количество аргументов, которые принимает функция.

Параметры функции do_action()

do_action($hook_name,$args); - выполняет пользовательскую функцию через хук - событие.

Использует два параметра - $hook_name и $args.

$hook_name(строка) (обязательный) Имя созданного хука.

$args(строка/массив/число/объект/логический) Аргумент, который будет передан функции. Функции можно передавать бесконечное количество аргументов...

Пример работы событий

Рассмотрим некоторый пример работы события для общего понимания работы хуков.

Работа хук - события
Работа хук - события
Работа хук - события

Предложенный вам пример наглядно показывает работу хук - события. Здесь вы можете видеть функцию которая выводит надпись - "Привет Мир!", привязку этой функцию к созданному хуку - событию и ее выполнение.

После срабатывания хука - события мы получим выведенную надпись: "Привет Мир!"

Таким образом вы сами сможете использовать свои функции прикреплять к определенным событиям и выводить различные данные.

Как удалить созданные хуки - фильтры и хуки - события

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

Параметры функций удаления хука - события и хука - фильтра

Как было сказано ранее, функции - работают абсолютно одинаково поэтому и параметры у функций совершенно одинаковые. Ниже вы можете видеть параметры двух функций - remove_filter() и remove_action().

Здесь показаны функции с указанием размещения параметров и описание самих параметров.

remove_filter( $hook_name, $function_name, $priority, $args ); remove_action( $hook_name, $function_name, $priority, $args );

$hook_name(строка) (обязательный) Имя фильтра, функцию которого нужно будет удалить.

$function_name(строка) (обязательный) Имя функции, которая должна быть удалена.

$priority(число) Приоритет хука (функции), который был установлен во время добавления.
По умолчанию: 10

$args(удален)

Примеры удаления хука - события

К примеру вы выводите некоторую надпись удалив при этом из текста html - теги где то на сайте и захотели её удалить, то при этом нужно сделать как показано на скриншоте.

Функция  вывода преобразованного  текста
Функция вывода преобразованного текста
Функция вывода преобразованного текста
Удаление хука - события
Удаление хука - события
Удаление хука - события

Так как при привязке функции к хуку создается массив хуков - событий. Из этого массива вы и удаляете хук - событие с помощью функции remove_action() также как и remove_filter().

Итак мы с вами разобрались, что такое хуки, рассмотрели работу с фильтрами и событиями, научились удалять хуки - события и хуки - фильтры. Надеюсь предложенный материал будет вам полезен.

Если появятся вопросы, пишите их в комментариях и не забывайте ставить палец вверх если статья вам понравилась, подписываться на RSS - ленту блога и канал на Яндекс.Дзен, чтобы не пропустить новые мои статьи.