Назад

Хуки, действия и фильтры WordPress: что они делают и как работают

В этой статье рассматривается одна из самых важных тем в разработке WordPress: хуки WordPress, включая хуки действий и хуки фильтров. Хуки лежат в основе не только работы плагинов WordPress, но и почти всего кода в экосистеме WordPress: большинство тем WordPress активно используют хуки, как и само “ядро WordPress”. Хуки WordPress — это абсолютно обязательная тема для изучения при разработке WordPress.

Мы снабдили это объяснение хуков WordPress полезным обзорным видео, ключевыми моментами, подробной инфографикой, викториной и даже кратким отрывком (!). Это потому, что это не просто одна из наших обычных статей: это примерная глава из нашего запущенного курса “Освоение разработки WordPress”.

Если вам понравилась эта статья, обязательно ознакомьтесь с «Запущено». Там еще около 40 глав, из которых взята эта. Мы поддерживаем это как единственное лучшее руководство по разработке WordPress в мире.

Основные выводы о хуках WordPress:

  • Хуки WordPress — важнейшая функция WordPress, которая позволяет разработчикам вставлять пользовательский код в PHP-обработку WordPress на определенных этапах этой обработки.
  • Разработчики пишут этот пользовательский код в функциях PHP, называемых подключенными функциями. Существуют два вида подключенных функций: действия и фильтры.
  • Существует два вида хуков: хуки действий и хуки фильтров. Хуки действий “подключаются” к действиям, а хуки фильтров “подключаются” к фильтрам.
  • Фильтрам передаются код или разметка с помощью их хуков фильтров; они изменяют то, что они передают, и должны return возвращать результат для использования WordPress в обычной обработке.
  • Действия, напротив, не требуют return значения, и часто их хукеры действий не передают конкретных параметров.

В этой главе мы рассмотрим одну из самых важных идей в разработке плагинов и тем WordPress: хуки. Можно также сказать, что эта глава посвящена «действиям и фильтрам”, потому что действия и фильтры — это два вида функций, которые взаимодействуют с хуками WordPress.

Понять хуки не так-то просто, отчасти потому, что сами термины довольно сложно визуализировать и отличать друг от друга.

Но отдача огромна: как разработчик, мы обнаруживаем, что работа с фильтрами и действиями, вероятно, является наиболее распространенным способом взаимодействия с WordPress. Со временем это стало одним из наших любимых занятий и в WordPress.

Терминология — Хуки, действия и фильтры

Особенно в этом случае, понимание терминов — ”хук”, ”действие» и “фильтр” — это половина дела. В Кодексе WordPress, например, все три термина используются очень небрежно и непоследовательно.

Определения, которые мы используем в этой главе, являются наиболее распространенными, которые вы найдете в WordPress в целом, и они лучше всего подходят для реального понимания происходящего. Поэтому придерживайтесь понимания, которое мы здесь представляем, и не расстраивайтесь, когда другие люди используют эти термины по-разному.

Как связаны хук, действие и фильтр

Действия и фильтры — это пользовательские функции. Они подключаются к хукам действий и фильтрам.

Это только начало; не волнуйтесь, если на данный момент это не имеет смысла:

  • Хук — это место в коде WordPress, в которое можно добавлять функции. Создавая хук, вы даете себе и другим разработчикам возможность добавить дополнительную функциональность в этом месте.
  • Подключенные функции — это пользовательские функции PHP, которые мы можем “подключить” к WordPress в местах, указанных его хуками.
  • Существует два типа подключаемых функций: действия и фильтры. Фильтры изменяют существующий вывод, в то время как действия могут выполнять любые пользовательские функции.
  • Хуки бывают двух типов — хуки действий и хуки фильтров — в зависимости от того, какой тип подключаемой функции они принимают.

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

Пока не пытайтесь углубляться в это слишком глубоко — просто поймите, что “Действия подключаются к хукам действий, а фильтры подключаются к хукам фильтров”.

Хукеры WordPress: привлечение внешних подрядчиков на фабрику WordPress

Хуки — это то, как WordPress приглашает “внешних подрядчиков”, которые помогают ему выполнять его работу.

Чтобы объяснить хуки, мы вернемся к нашей центральной аналогии с WordPress как фабрикой.

Помните, что WordPress привлекает внешних подрядчиков для выполнения некоторой части своей работы. У наших подрядчиков нет постоянного места на фабрике WordPress — они застряли снаружи, пока их не пригласит сама фабрика.

Для наших целей эти внешние подрядчики приходят из двух мест:

  1. Плагины
  2. functions.phpФайл внутри родительской или дочерней темы

Внешние подрядчики сами являются пользовательским кодом в плагинах и functions.php которые изменяют функционирование фабрики WordPress.

Хукеры подключаются к внешнему коду определенными способами и в определенных местах.

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

Как WordPress обращается к своим “Подрядчикам”

Мы можем думать о “хуках” WordPress как о настоящих гигантских заводских хуках, на которых работают подрядчики, вот так:

/* Environment: We're in functions.php or a PHP file in a plugin */

function wpshout_filter_example( $title ) {
    return 'Хуки: ' . $title;
}
add_filter( 'the_title', 'wpshout_filter_example' );

Результат на живом сайте выглядит следующим образом:

Хуки: Хуки, действия и фильтры WordPress: что они делают и как работают

Каждый хук помечен определенным именем, например, wp_head, соответствующим части процесса WordPress factory (в случае с wp_head, процессом создания HTML-раздела страницы <head>).

Эти хуки отправляются в лобби, чтобы подрядчики могли использовать их, и они делают это в определенном порядке. wp_head Хук отправляется в лобби и обратно непосредственно перед <head> завершением, wp_footer хук отправляется в лобби и обратно непосредственно перед <body> завершением и так далее. Таким образом, подрядчик всегда подключается непосредственно к активной части фабрики, над которой предстоит поработать.

Когда подрядчик хочет стать частью определенного процесса, он ждет, пока этот хук появится на входе, и едет по нему прямо в нужную часть фабрики.

Если подрядчик не использовал надлежащий хук, он не смог бы добиться желаемого на заводе. Хукеры — это то, что “приглашает” внешний код (из functions.php, плагины и так далее) В определенные области обработки PHP WordPress.

Два вида хуков, два вида подрядчиков

Мы на полпути к пониманию хуков, действий и фильтров WordPress. Другая часть немного более конкретна: в лобби есть хуки двух типов, хуки действий и хуки фильтров.

Посмотрите еще раз на диаграмму Хуки WordPress, и давайте разберемся с хуками действий и фильтров.

Хукеры действий

Хукеры действий, как правило, зависают на этапах: например, “вы почти закончили создание <head> раздела страницы” для хукера wp_head действия или “вы почти закончили создание <body> раздела страницы” для хукера wp_footer действия.

Когда подрядчики внедряют хуки действий на заводе, они, как правило, делают практически все, что хотят: добавляют кучу всего на страницу или делают совершенно другие вещи, например регистрируют ошибку или даже отправляют электронное письмо.

Хуки фильтров

Хуки фильтров работают немного по-другому. Подрядчики, использующие хуки действий, могут делать все, что захотят, и ни за что не несут ответственности. Но подрядчики, использующие хуки фильтров, на самом деле подключаются к обычному рабочему процессу: им дается что—то для обработки — скажем, блок текста — и они должны передать этот же блок текста (возможно, слегка измененный) обратно обычному рабочему с помощью инструкции PHP return.

Итак, подрядчик, использующий хуки фильтров, обычно не просто делает все, что хочет; он работает с тем, что ему предоставлено в его разделе фабрики. “Этот раздел работает с заголовком публикации”, — может сказать менеджер раздела. “Делайте с заголовком поста все, что хотите, но если вы не вернете мне заголовок поста после внесения изменений, весь этот процесс не будет работать должным образом”.

Что собой представляют эти подрядчики?

Наши “подрядчики” — это пользовательские функции PHP, которые можем написать мы (или кто-либо другой).

Надеюсь, пока у нас все получается; теперь мы собираемся немного углубиться в технические вопросы, чтобы вы действительно могли начать писать эти вещи.

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

Поскольку эти функции попадают в WordPress, прикрепляясь к хукам WordPress, то есть будучи “подключенными” извне, формальный термин для них — подключенные функции.

Существует два вида подключаемых функций:

  1. Действия, также называемые функциями действий, которые подключаются к хукерам действий WordPress и
  2. Фильтры, также называемые функциями фильтрации, которые подключаются к хукам фильтров WordPress.

Давайте рассмотрим по одному из них.

Пример использования функции фильтрации

Наш первый подрядчик — это фильтр или функция фильтрации. Другими словами, это функция, которая запускает хук фильтра на заводе.

/* Environment: We're in functions.php or a PHP file in a plugin */

function wpshout_action_example( ) {
    echo "Земляника здесь.";
}
add_action( 'wp_footer', 'wpshout_action_example' );

Пример использования функции Хук Action Пример использования функции Хук Action

Чему мы научились

WordPress использует действия и фильтры для расширения возможностей — от глупых примеров, которые мы показали сегодня, до сверхсложных плагинов, таких как WooCommerce. Мы узнали, для чего предназначены хуки, действия и фильтры, а также основы того, как они работают.

Подводя итог: WordPress регистрирует хукеры действий и фильтров в определенных местах процесса создания страницы WordPress. Затем любой разработчик может написать свои собственные функции, которые подключаются к этим хукам действий и фильтров. Фильтры (или “функции фильтрации”) изменяют то, что им предоставляется, и передают это обратно через return; действия (или “функции действия”) могут echo вводить текст, изменять данные и практически все остальное, и им не нужно return значение.

Система хуков WordPress — это действительно путь к полноценной разработке WordPress, поэтому не бойтесь возвращаться к материалу, экспериментировать с ним и создавать его по-своему.