Хуки — это одна из самых мощных и гибких возможностей WordPress, позволяющая разработчикам внедрять, изменять и расширять функциональность без изменения исходного кода ядра или тем. В этой статье мы подробно разберём, что такое хуки, как их использовать для автоматизации задач на сайте и приведём практические примеры с кодом.
Что такое хуки в WordPress: actions и filters
Хуки делятся на два основных типа: actions — действия, и filters — фильтры. Actions позволяют добавить или выполнить код в определённый момент работы WordPress, а filters — изменить данные перед их выводом или обработкой.
Например, action можно использовать, чтобы добавить дополнительный код после публикации записи, а filter — чтобы изменить заголовок поста перед отображением.
Это ключевой инструмент для автоматизации, поскольку позволяет безболезненно расширять функционал, не трогая код ядра и тем.
Разница между actions и filters
Actions вызываются для выполнения определённого кода, они не возвращают значения. Filters принимают значение, изменяют его и возвращают обратно. Это важно учитывать при написании функций.
Пример action: add_action('save_post', 'yelly_save_post_action'); — добавит функцию, которая сработает при сохранении записи.
Пример filter: add_filter('the_title', 'yelly_modify_title_filter'); — изменит заголовок записи перед выводом.
Практические примеры использования хуков для автоматизации
Автоматическое добавление текста в конец записи
Часто нужно автоматически добавлять, например, юридическую информацию или подпись в конце всех постов. Для этого удобно использовать фильтр the_content.
function yelly_append_text_to_content($content) {
if (is_single()) {
$content .= '<p><em>Спасибо за чтение! Подписывайтесь на обновления.</em></p>';
}
return $content;
}
add_filter('the_content', 'yelly_append_text_to_content');Этот код проверяет, что мы на странице одной записи, и добавляет абзац с текстом в конец контента. Просто и эффективно.
Автоматическая отправка письма после публикации записи
Если нужно уведомлять администратора или подписчиков о новых публикациях, можно использовать action publish_post или transition_post_status.
function yelly_notify_admin_on_publish($ID, $post) {
if ($post->post_status == 'publish') {
$admin_email = get_option('admin_email');
$subject = 'Новая публикация: ' . $post->post_title;
$message = 'Опубликована новая запись: ' . get_permalink($ID);
wp_mail($admin_email, $subject, $message);
}
}
add_action('publish_post', 'yelly_notify_admin_on_publish', 10, 2);Этот код отправит письмо на почту администратора сразу после публикации записи. Можно расширить логику и отправлять письма подписчикам или интегрировать с внешними сервисами.
Изменение заголовка записи с помощью фильтра
С помощью фильтра the_title можно динамически изменять заголовки, например, добавлять префикс для определённой категории.
function yelly_add_prefix_to_title($title, $id = null) {
if (is_admin()) return $title; // не менять в админке
if ($id) {
$categories = get_the_category($id);
foreach ($categories as $category) {
if ($category->slug == 'novosti') {
$title = '[Новость] ' . $title;
break;
}
}
}
return $title;
}
add_filter('the_title', 'yelly_add_prefix_to_title', 10, 2);Такой код добавляет метку [Новость] перед заголовками постов из категории «Новости», что помогает визуально выделять их на сайте.
Как правильно создавать свои хуки для расширения функционала
Вы можете создавать свои собственные хуки — actions и filters — чтобы другие разработчики или вы сами могли расширять ваш код без правки исходников.
Для создания action используйте функцию do_action('yelly_custom_action', $arg1, $arg2);. Для фильтра — apply_filters('yelly_custom_filter', $value, $arg1);.
Например, если вы создаёте плагин для отправки уведомлений, можно добавить action, который позволит подключить дополнительные способы уведомления.
function yelly_send_notification($message) {
// базовая отправка
mail('admin@yelly.ru', 'Уведомление', $message);
// дополнительные действия
do_action('yelly_after_send_notification', $message);
}Далее кто-то может подключиться к этому хуку и реализовать отправку в Telegram или Slack, не меняя ваш плагин.
Популярные плагины для работы с хуками и автоматизацией
Для удобства управления хуками и автоматизацией можно использовать следующие плагины:
- Code Snippets — позволяет добавлять пользовательский PHP-код без правки functions.php
- WP Crontrol — расширяет возможности по управлению планировщиком задач (cron) WordPress
- Advanced Custom Fields (ACF) — добавляет удобный интерфейс для создания пользовательских полей и интеграции с хуками
- Action Scheduler — библиотека для управления асинхронными и отложенными задачами, часто используется в WooCommerce
Эти инструменты помогут систематизировать работу с хуками и автоматизировать рутинные задачи на сайте.
Советы по отладке и безопасности хуков в WordPress
Работая с хуками, важно следить за производительностью и безопасностью:
- Не добавляйте тяжелые операции напрямую в хуки, которые вызываются часто — лучше использовать отложенное выполнение через wp_cron или Action Scheduler.
- Проверяйте права пользователя в функциях, чтобы избежать несанкционированных действий.
- Используйте нэймспейсы или префиксы (например,
yelly_), чтобы избежать конфликтов с другими плагинами. - Отлаживайте хуки с помощью плагинов Debug Bar и Query Monitor.
Если функция подключается к хуку, всегда проверяйте входные аргументы и корректно обрабатывайте ошибки, чтобы не нарушать работу сайта.