Хуки — одна из самых мощных возможностей WordPress, позволяющая разработчикам изменять поведение ядра, тем и плагинов без правки их исходного кода. В этой статье мы подробно разберём, что такое хуки, как их правильно использовать и приведём конкретные примеры, которые помогут вам создавать свои кастомные решения.
Что такое хуки в WordPress: actions и filters
Хуки — это точки в коде WordPress, где разработчики могут «подцепиться» и выполнить свой код. Существует два основных типа хуков:
- Actions — позволяют добавить или выполнить дополнительный код в определённый момент, например, при загрузке страницы или сохранении записи.
- Filters — позволяют изменить данные перед их выводом или сохранением, например, изменить содержимое поста перед отображением.
Использование хуков — это самый чистый и рекомендуемый способ модифицировать поведение WordPress, так как вы не меняете исходные файлы системы, а добавляете свой код в отдельном плагине или файле functions.php темы.
Как правильно добавлять хуки: функции add_action и add_filter
Чтобы использовать хук, нужно написать функцию-обработчик и «подключить» её к нужному хуку с помощью функций add_action или add_filter.
Синтаксис:
add_action('hook_name', 'wpunit_my_action_function', 10, 2);где:
hook_name— имя существующего хука WordPress.wpunit_my_action_function— ваша функция-обработчик.10— приоритет выполнения (чем меньше число, тем раньше выполнится).2— количество аргументов, передаваемых функции.
Для фильтров аналогично:
add_filter('hook_name', 'wpunit_my_filter_function', 10, 1);Функция обработчик должна принимать аргументы, которые передаёт хук, и для фильтров возвращать изменённое значение.
Практические примеры использования хуков в WordPress
1. Добавление текста в конец каждого поста с помощью фильтра
Допустим, нужно автоматически добавлять примечание внизу каждого поста. Для этого используем фильтр the_content:
function wpunit_append_text_to_content($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$content .= '<p><em>Спасибо за прочтение!</em></p>';
}
return $content;
}
add_filter('the_content', 'wpunit_append_text_to_content');Здесь мы проверяем, что выводится один пост (single), чтобы не добавлять текст в архивах или виджетах, и добавляем HTML в конец содержимого.
2. Отправка уведомления администратору при публикации новой записи
Используем action-хук publish_post для реализации уведомления по email:
function wpunit_notify_admin_on_publish($post_ID) {
$post = get_post($post_ID);
$author = get_userdata($post->post_author);
$subject = 'Новая запись опубликована на сайте';
$message = 'Опубликована новая запись: ' . $post->post_title . '\nАвтор: ' . $author->display_name . '\nСсылка: ' . get_permalink($post_ID);
wp_mail(get_option('admin_email'), $subject, $message);
return $post_ID;
}
add_action('publish_post', 'wpunit_notify_admin_on_publish');Такой код автоматически отправит письмо администратору, когда запись перейдёт в статус «опубликовано».
3. Изменение заголовка сайта динамически через фильтр
Фильтр bloginfo позволяет изменить различные параметры сайта. Например, добавим в заголовок текущую дату:
function wpunit_modify_bloginfo($output, $show) {
if ($show === 'name') {
$output .= ' - ' . date('d.m.Y');
}
return $output;
}
add_filter('bloginfo', 'wpunit_modify_bloginfo', 10, 2);Теперь в заголовке сайта будет отображаться дата, что может быть полезно для новостных ресурсов.
Как найти и использовать нужный хук в WordPress
Чтобы эффективно работать с хуками, важно уметь находить их в коде WordPress или плагинов. Вот несколько способов:
- Изучать официальную документацию на developer.wordpress.org — здесь подробно расписаны все стандартные хуки.
- Использовать поиск по исходникам WordPress и плагинов в IDE по ключевым словам
do_action('hook_name')илиapply_filters('hook_name'). - Устанавливать плагины для отладки хуков, например, Query Monitor или Debug Bar, которые показывают активные хуки на странице.
Зная, где вызывается нужный хук, вы можете добавить своё расширение без риска повредить систему.
Советы по написанию функций-обработчиков для хуков
При написании функций для хуков стоит помнить несколько важных правил:
- Используйте префиксы для функций, например,
wpunit_, чтобы избежать конфликтов с другими плагинами и темами. - Убедитесь, что ваши функции не вызывают фатальных ошибок — всегда проверяйте входные данные.
- Для фильтров обязательно возвращайте изменённые данные, иначе можно нарушить работу сайта.
- Используйте приоритет выполнения (третий параметр в
add_action/add_filter), чтобы управлять порядком вызова нескольких обработчиков. - Документируйте свой код, чтобы было понятно, что делает функция и зачем она нужна.
Плагины для работы с хуками и их отладка
Для упрощения работы с хуками и поиска нужных точек расширения рекомендуем использовать следующие плагины:
- Code Snippets — позволяет добавлять свои функции (хуки) прямо из админки без правки файлов.
- Query Monitor — помогает отследить, какие хуки вызываются на странице, и посмотреть ошибки.
- Hook Me Up — показывает список всех активных хуков и позволяет быстро понять, где можно добавить код.
Использование таких инструментов значительно ускоряет разработку и снижает вероятность ошибок.
Заключение
Хуки — фундаментальная часть разработки на WordPress. Освоив их использование, вы сможете гибко настраивать сайт, создавать собственные функции и интегрировать внешние сервисы. Не бойтесь экспериментировать, но всегда тестируйте свои изменения в тестовой среде.