Хуки в WordPress — это мощный инструмент, который позволяет вам вмешиваться в работу системы без изменения ядра. С их помощью можно автоматизировать множество процессов на сайте, добавлять функционал и изменять поведение плагинов и тем. В этой статье мы подробно разберем, как использовать action и filter хуки для решения конкретных задач с примерами кода.
Что такое хуки в WordPress: action и filter
Хуки — это точки входа, которые WordPress предоставляет разработчикам для подключения своей логики. Есть два основных типа хуков:
- Action хуки — позволяют выполнить дополнительный код в определённый момент работы WordPress, например, при сохранении поста или загрузке страницы.
- Filter хуки — позволяют изменить данные перед их выводом или сохранением, например, модифицировать содержимое поста или параметры запроса.
Понимание различий между этими хуками — ключ к эффективной автоматизации.
Автоматизация отправки уведомлений при публикации поста (Action hook)
Задача: автоматически отправлять уведомление на email администратора при публикации нового поста.
Для этого используем action хук publish_post. Он срабатывает в момент публикации записи.
function wptask_send_email_on_publish($post_ID) {
$post = get_post($post_ID);
$author = get_userdata($post->post_author);
$subject = 'Новая публикация на сайте';
$message = 'Опубликована новая статья: ' . $post->post_title . "\n";
$message .= 'Автор: ' . $author->display_name . "\n";
$message .= 'Ссылка: ' . get_permalink($post_ID);
wp_mail(get_option('admin_email'), $subject, $message);
return $post_ID;
}
add_action('publish_post', 'wptask_send_email_on_publish');Объяснение кода:
- Функция получает ID опубликованного поста.
- Берет данные поста и автора.
- Формирует письмо и отправляет на email администратора.
- Функция возвращает ID поста, чтобы не нарушать цепочку вызовов.
Такой подход позволяет автоматизировать рассылку уведомлений без дополнительного вмешательства.
Изменение содержимого поста перед выводом (Filter hook)
Задача: добавить предупреждение в начало всех постов категории "Новости".
Для этого используем фильтр the_content, который отвечает за содержимое записи перед выводом.
function wptask_add_warning_to_news($content) {
if (is_single() && has_category('Новости')) {
$warning = '<div style="border:1px solid red; padding:10px; margin-bottom:15px;">Внимание: информация в этой статье может быть устаревшей.</div>';
return $warning . $content;
}
return $content;
}
add_filter('the_content', 'wptask_add_warning_to_news');Объяснение кода:
- Проверяем, что это одиночная запись и она принадлежит категории "Новости".
- Если да, то добавляем HTML-блок с предупреждением перед основным содержимым.
- Если нет — возвращаем содержимое без изменений.
Такой фильтр помогает динамически модифицировать контент без изменения базы данных.
Автоматическое присвоение пользовательской роли новым пользователям (Action hook)
Задача: при регистрации новых пользователей присваивать им роль "Подписчик" с дополнительными правами.
Используем action хук user_register, который срабатывает после создания пользователя.
function wptask_set_custom_role($user_id) {
$user = new WP_User($user_id);
// Устанавливаем роль 'subscriber'
$user->set_role('subscriber');
// Добавляем дополнительные права
$user->add_cap('read_private_posts');
}
add_action('user_register', 'wptask_set_custom_role');Пояснения:
- Получаем объект пользователя по ID.
- Назначаем роль "subscriber".
- Добавляем дополнительное право читать приватные записи.
Это позволяет гибко управлять правами пользователей сразу при регистрации.
Оптимизация запросов с помощью фильтра pre_get_posts
Задача: ограничить количество постов на странице архива категории "Продукты" до 5 штук.
Для этого применим фильтр pre_get_posts, который позволяет изменять параметры WP_Query перед выполнением запроса.
function wptask_limit_products_archive($query) {
if (!is_admin() && $query->is_main_query() && is_category('Продукты')) {
$query->set('posts_per_page', 5);
}
}
add_action('pre_get_posts', 'wptask_limit_products_archive');Объяснение:
- Проверяем, что запрос не в админке, это основной запрос и категория "Продукты".
- Устанавливаем параметр
posts_per_pageравным 5.
Это позволяет оптимизировать количество выводимых записей и ускорить загрузку страниц.
Использование популярных плагинов для работы с хуками
Для облегчения работы с хуками существуют плагины, которые помогут быстро находить нужные точки подключения и тестировать код:
- Query Monitor — показывает активные хуки и запросы, помогает отлаживать код.
- Code Snippets — позволяет добавлять PHP код без правки functions.php, удобно для тестирования хуков.
- Hook Me Up — отображает активные хуки на странице, полезно для изучения последовательности вызовов.
Эти инструменты значительно ускоряют разработку и позволяют избежать ошибок.
Рекомендации по работе с хуками для автоматизации
Чтобы эффективно использовать хуки, соблюдайте несколько правил:
- Используйте префиксы в именах функций, например,
wptask_, чтобы избежать конфликтов с другими плагинами. - Документируйте ваши функции, чтобы было понятно, для чего они нужны.
- Не меняйте ядро WordPress — используйте хуки для расширения функционала.
- Тестируйте код на тестовом сайте, чтобы избежать сбоев на рабочем.
- Следите за производительностью — тяжелые операции лучше запускать через wp-cron или отложенные задачи.
Правильное применение хуков поможет создать гибкий и надежный сайт на WordPress.