В WordPress хуки (hooks) — это одна из ключевых возможностей для расширения и модификации функционала без изменения исходного кода ядра или плагинов. Если вы хотите создавать гибкие решения, интегрировать собственные функции или изменять поведение сайта, понимание хуков обязательно.
Что такое хуки в WordPress и зачем они нужны
Хуки — это точки подключения, которые позволяют вставлять свой код в определённые места выполнения WordPress. Существует два типа хуков: actions и filters.
- Actions — вызывают пользовательские функции в определённые моменты (например, при загрузке страницы, сохранении поста, и т.д.).
- Filters — позволяют изменять данные перед их выводом или сохранением.
При помощи хуков можно:
- Добавлять новые элементы в админку или на фронтенд.
- Изменять выводимый контент.
- Выполнять дополнительные действия при сохранении данных.
- Создавать интеграции с внешними сервисами.
Как регистрировать и использовать Action Hooks в WordPress
Для подключения своей функции к action-хуку используется функция add_action. Синтаксис простой:
add_action('hook_name', 'wppartner_my_custom_function', 10, 2);Здесь:
'hook_name'— имя хука, к которому вы подключаетесь.'wppartner_my_custom_function'— название вашей функции (желательно с префиксом, чтобы избежать конфликтов).- Число
10— приоритет вызова (меньше — раньше). 2— количество параметров, которые передаются функции.
Пример: добавление уведомления в админбар WordPress
Рассмотрим практический пример — будем добавлять в админбар сообщение с количеством опубликованных постов.
function wppartner_add_admin_bar_notice($wp_admin_bar) {
$count = wp_count_posts()->publish;
$args = array(
'id' => 'wppartner_post_count',
'title' => 'Опубликовано постов: ' . $count,
'meta' => array('class' => 'wppartner-admin-bar-notice')
);
$wp_admin_bar->add_node($args);
}
add_action('admin_bar_menu', 'wppartner_add_admin_bar_notice', 100);В этом примере при загрузке админбара вызывается функция wppartner_add_admin_bar_notice, которая добавляет новый узел с количеством опубликованных постов.
Как использовать фильтры для изменения данных в WordPress
Фильтры позволяют изменять данные, которые проходят через определённые точки в ядре или плагинах. Для подключения к фильтру используется функция add_filter:
add_filter('hook_name', 'wppartner_my_filter_function', 10, 1);Пример: изменим вывод заголовка поста, добавив к нему префикс.
function wppartner_modify_post_title($title) {
return '[WPPartner] ' . $title;
}
add_filter('the_title', 'wppartner_modify_post_title');Теперь все заголовки постов будут выводиться с приставкой [WPPartner].
Пример: фильтрация контента для добавления заметки в конце поста
Допустим, нужно добавить заметку в конце каждого поста с рекомендацией подписаться на рассылку.
function wppartner_append_subscribe_note($content) {
if (is_single() && is_main_query()) {
$note = '<p>Если вам понравилась статья, подпишитесь на нашу рассылку!</p>';
return $content . $note;
}
return $content;
}
add_filter('the_content', 'wppartner_append_subscribe_note');Этот код добавит HTML с призывом к действию в конец каждого одиночного поста.
Практические советы по работе с хуками в WordPress
Правильное именование функций и префиксы
Чтобы избежать конфликтов между плагинами и темами, всегда добавляйте уникальные префиксы к именам своих функций. В нашем случае мы используем wppartner_. Это помогает быстро идентифицировать авторство кода и предотвращает случайное переопределение функций.
Определение приоритета вызова
Параметр приоритета (третий аргумент add_action и add_filter) определяет порядок вызова функций. Если вам нужно, чтобы ваш код сработал раньше других, укажите меньший приоритет (например, 5). Для задержки — больший (например, 20).
Использование параметров в функциях
Вызов хуков может передавать данные в подключаемые функции. Чтобы принимать параметры, указывайте их количество четвёртым аргументом в add_action или add_filter. Например, add_action('hook_name', 'function_name', 10, 2) позволяет функции принимать два параметра.
Популярные хуки, которые стоит знать разработчику
Для практической работы с WordPress полезно знать основные хуки:
init— срабатывает после загрузки WordPress, подходит для регистрации типов записей, таксономий и т.п.wp_enqueue_scripts— для подключения скриптов и стилей на фронтенде.admin_menu— для добавления пунктов меню в админке.save_post— вызывается при сохранении записи, можно использовать для валидации или изменения метаданных.the_content— фильтр для изменения содержимого поста перед выводом.
Пример регистрации собственного типа записи с хуком init
function wppartner_register_custom_post_type() {
$args = array(
'labels' => array('name' => 'Отзывы'),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail')
);
register_post_type('wppartner_review', $args);
}
add_action('init', 'wppartner_register_custom_post_type');Таким образом, с помощью init мы регистрируем новый тип записей «Отзывы».
Отладка и тестирование хуков
Чтобы отследить, срабатывает ли ваш хук и в какой последовательности, используйте функции error_log или плагины для отладки (например, Query Monitor). Пример с логированием:
function wppartner_debug_hook() {
error_log('Хук wppartner_debug_hook сработал');
}
add_action('init', 'wppartner_debug_hook');Так вы увидите сообщение в логах сервера и сможете быть уверены, что функция вызывается.
Заключение
Хуки — это фундамент для создания мощных и гибких решений в WordPress. Понимание разницы между actions и filters, умение регистрировать функции с правильными параметрами и приоритетами — ключ к качественной разработке. Практикуйтесь, экспериментируйте с хуками, а приведённые примеры помогут быстро начать.