Руководство по хукам WordPress

Опубликовано: 2021-07-19

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

Зачем использовать крючки?

В случае , если вы еще не знаете, что это очень плохая идея , чтобы изменить основные файлы в WordPress (WP). Помимо угроз безопасности, ваши изменения будут перезаписываться каждый раз, когда вы обновляете WP! То же самое и с плагинами и темами.

Конечно, вы можете отслеживать каждое обновление и повторно вносить свои изменения. Кроме того, можно пробить через улей , чтобы получить на мед. Это может показаться удобным, но рано или поздно вас ужалит.

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

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

Кто они такие?

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

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

Как они работают?

Вы добавляете в ловушку одну или несколько функций. Другие функции также могут быть добавлены вашей темой, плагинами или самим WP. Когда WP загружается, он встречает перехватчик. Он проверяет список всех функций, связанных с ловушкой. WP выполняет все эти функции в порядке приоритета . После этого он возобновляет загрузку всего после перехвата.

На что они похожи?

Добавление функции в ловушку выглядит так:

add_action ($ hook_name, $ function_name, $ priority, $ arguments);

$ hook_name - это имя ловушки, на которую вы хотите настроить таргетинг.

$ function_name - это имя функции, которую вы хотите добавить к этому хуку.

$ приоритетом является целым числом , указывающим $ имя_функции «ы приоритет в $ hook_name» ы очереди. Чем меньше число, тем выше приоритет. Начиная с 1, это число может быть сколь угодно большим (в пределах системы), но вряд ли вы увидите его выше 40. Значение по умолчанию - 10.

$ arguments - это целое число, указывающее количество аргументов, которые вы используете в функции. Это должно соответствовать количеству аргументов, переданных функции. Значение по умолчанию - 1.

Удаление функции из хука почти то же самое:

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

$ Function_name и $ приоритет должен соответствовать их исходным значениям из соответствующей функции add_action, или они не будут удалены!

Виды крючка

Есть два основных типа крючков: крючки действия и крючки фильтра . Они во многом похожи - add_action () и его аналог add_filter () вызываются одинаково. Разница заключается в функции, через которую вы проходите:


// Запускаем код
add_action ('where_to_do_the_thing', 'do_the_thing');
function do_the_thing () {
// Выполнение некоторых действий, необходимых для выполнения задачи
}

// Изменяем переменную
add_filter ('the_thing', 'change_the_thing');
function change_the_thing ($ thing) {
// Фильтруем $ thing и меняем на то, что вам нужно, затем ...

вернуть вещь $;
}

Следует отметить , что во втором примере, первый аргумент , переданный Functio п значение вносятся изменения. Любые дополнительные аргументы предназначены только для служебных целей и не передаются обратно через ловушку.

Возможно, вы заметили, что я пропустил $ priority и $ arguments . Это потому, что значения по умолчанию подходят. Если это помогает, приведенное выше, по сути, такое же, как:


// Запускаем код
add_action ('where_to_do_the_thing', 'do_the_thing', 10, 1);
// Изменяем переменную
add_filter ('the_thing', 'change_the_thing', 10, 1);

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

Менее надуманные примеры

Предположим, вы хотите, чтобы WP отправлял уведомление по электронной почте, когда новый пользователь регистрируется на вашем сайте. Ссылаясь на кодекс WP, вы найдете ловушку действия user_register . Это предоставляет вам переменную $ user_id , которую вы можете использовать для получения сведений о пользователе. wp_mail () сделает все остальное:


add_action ('user_register', 'notify_on_user_registration');
function notify_on_user_registration ($ user_id) {

// Получаем пользователя
$ user = get_user_by ('идентификатор', $ user_id);

// Подготавливаем тему и тело письма
$ subject = «Регистрация нового пользователя»;
$ message = «Зарегистрирован новый пользователь {$ user-> first_name} {$ user-> last_name}.»;

// Отправляем электронное письмо
wp_mail ('[email protected]', $ subject, $ message);
}

Что делать, если вы хотите перенаправлять пользователей на свою главную страницу при входе в систему? Этого легко добиться с помощью ловушки login_redirect , которая предоставляет URL-адрес, на который по умолчанию перенаправляются пользователи:


add_filter ('login_redirect', 'redirect_user_on_login');
function redirect_user_on_login ($ redirect_to) {
return home_url ();
}

Вскоре после того, как вы добавите это, вы быстро поймете, что как администратор, вы хотите, чтобы вас перенаправили прямо на панель управления WP, а не на домашнюю страницу. Не проблема - вы просто изменяете ловушку, чтобы она работала только для администраторов:


add_filter ('login_redirect', 'redirect_user_on_login', 10, 3);
функция redirect_user_on_login ($ redirect_to, $ request, $ user) {
// Изменение URL-адреса входа, если пользователь не является администратором
if (isset ($ user-> roles) && is_array ($ user-> roles)) {
if (in_array ('администратор', $ пользователь-> роли)) {
return $ redirect_to; // Перенаправляем администраторов по умолчанию (админка)
}
}

return $ redirect_to;
}

Обратите внимание, что в игру вступили $ priority и $ arguments !

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

Значение $ priority 10, конечно, такое же, как и значение по умолчанию, но оно указано для достижения значения $ arguments, которое вам нужно выше.

Создание собственных крючков

Возможность создавать собственные крючки в ваших руках! Функции, предоставляемые WP, выглядят так:

do_action ($ hook_name, $ arg_1, $ arg_2… $ arg_n);

apply_filters ($ hook_name, $ arg_1, $ arg_2… $ arg_n);

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

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


<? php do_action ('before_body_tag'); ?;>
</head>
<body>

Затем вы можете добавить столько скриптов, сколько вам нужно:


add_action ('before_body_tag', 'add_analytics_custom');
function add_analytics_custom () {
// теги <script> и код аналитики идут сюда
}

apply_filters () работает немного иначе. Как обсуждалось выше, фильтры используются для изменения значений. Поскольку фильтры возвращают значение, вы назначаете свой вызов apply_filters () переменной:


<? php $ text = apply_filters ('call_to_action_text', 'О нас'); ?>
<a href = ”<? php echo get_permalink ('about'); ?> ”Class =” button cta ”>
<? php echo $ text; ?>
</a>

// Как вариант, вы можете напрямую отобразить результат apply_filters ()
<a href = ”<? php echo get_permalink ('about'); ?> ”Class =” button cta ”>
<? php echo apply_filters ('call_to_action_text', 'О нас'); ?>
</a>

Затем вы можете при необходимости изменить отфильтрованную переменную:


add_filter ('call_to_action_text', 'change_call_to_action_text');
function change_call_to_action_text ($ text) {
if (is_front_page ()) {
$ text = 'Узнайте больше';
}

return $ text;
}

Минусы

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

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

Дальнейшие советы

  • Создавая функции для хуков, убедитесь, что имя уникально, иначе возникнет конфликт. То же самое и с именами пользовательских хуков и фильтров!
  • Используйте крючки, чтобы ваши шаблоны не загромождались. Несколько общих хуков do_action (), вставленных в ваши шаблоны, могут помочь уберечь логику от разметки (почти всегда хорошая идея).
  • Когда вы устанавливаете новый плагин, проверьте, какие хуки он предоставляет, и подумайте, как вы могли бы их использовать. Это особенно полезно для неизбежных раз , что плагин не совсем то , что вы хотите.
  • Добавляя действие или фильтр, вы можете заменить имя функции самой функцией. Это может помочь сохранить автономность действий и фильтров. Добавленные таким образом функции нельзя удалить с помощью remove_action () или remove_filter () , поэтому будьте осторожны!

add_action ('where_to_do_the_thing', function () {
echo 'Дело сделано.';
}, 10, 1);
  • Ознакомьтесь с другими доступными функциями, связанными с ловушками , такими как did_action () или has_action () . Никогда не знаешь, когда будет полезно просто знать о них.

Резюме

Использование крючков - дело привычки. Каждый раз, когда вы работаете над проектом WP, задайте себе два простых вопроса:

  1. «Есть ли какой-нибудь крючок, который облегчит мне задачу?»
  2. «Могу я добавить крючок, который упростит мне жизнь в будущем?»

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

Примеры в этом руководстве - это верхушка айсберга. Только в ядре WP есть сотни хуков, не говоря уже о огромной библиотеке плагинов и тем. Взгляните на справочник действий WP и справочник по фильтрам, чтобы получить полный список основных перехватчиков WP.


Если вам нужна помощь в веб-разработке, не стесняйтесь обращаться к нам.