Хуки — это одна из самых мощных возможностей WordPress, позволяющая изменять или расширять функциональность без правки исходного кода ядра или плагинов. В этой статье мы подробно разберём, как использовать два основных типа хуков — actions и filters — для автоматизации рутинных задач и кастомизации сайта.
Что такое хуки в WordPress: actions и filters
Хуки — это механизмы, которые позволяют «подключать» свой код к различным этапам работы WordPress. Существует два типа хуков:
- Actions — выполняют код в определённый момент или событие. Например, когда создаётся пост, обновляется профиль пользователя или загружается страница.
- Filters — позволяют изменить данные перед их выводом или сохранением, например, контент поста, заголовок, метаданные.
Понимание разницы и правильное использование этих хуков — ключ к эффективной автоматизации и кастомизации.
Как зарегистрировать action и filter
Для подключения своего обработчика к хуку используется функция add_action для действий и add_filter для фильтров. Оба принимают минимум два параметра: название хука и имя вашей функции.
function wproot_custom_action() {
// Ваш код
}
add_action('init', 'wproot_custom_action');
function wproot_custom_filter($content) {
// Изменяем контент
return $content . ' Дополнительный текст';
}
add_filter('the_content', 'wproot_custom_filter');
Здесь мы добавили функцию, которая сработает при событии init (инициализация WordPress), и фильтр, который допишет текст к содержимому записи.
Практические примеры использования хуков для автоматизации
Автоматическая смена статуса поста по условию
Допустим, вам нужно, чтобы все посты с определённой категорией автоматически становились в статус «черновик» через сутки после публикации. Можно использовать action wproot_auto_draft_old_posts на «cron»-задачу.
function wproot_auto_draft_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'news',
'date_query' => array(
array(
'before' => '1 day ago',
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
wp_update_post(array(
'ID' => get_the_ID(),
'post_status' => 'draft'
));
}
wp_reset_postdata();
}
}
add_action('wproot_daily_event', 'wproot_auto_draft_old_posts');
// Регистрируем cron-событие при активации темы или плагина
if (!wp_next_scheduled('wproot_daily_event')) {
wp_schedule_event(time(), 'daily', 'wproot_daily_event');
}
Такой код позволит ежедневно проверять посты категории «news» и переводить старые в черновики, освобождая актуальность контента.
Фильтрация заголовков для SEO
Если хотите автоматически добавлять бренд к заголовкам страниц, можно использовать фильтр the_title:
function wproot_add_brand_to_title($title, $id = null) {
if (is_singular() && in_the_loop() && !is_admin()) {
$title .= ' | WProot.ru';
}
return $title;
}
add_filter('the_title', 'wproot_add_brand_to_title', 10, 2);
Этот фильтр добавит «| WProot.ru» к заголовкам записей и страниц на фронтенде, что полезно для узнаваемости бренда.
Полезные плагины для работы с хуками
Для глубокого анализа и быстрого тестирования хуков рекомендую следующие плагины:
- Query Monitor — покажет, какие хуки вызываются на странице, и информацию о запросах.
- Code Snippets — удобный менеджер для добавления своего PHP-кода с хуками без правки functions.php.
- Hook Me Up — выводит список всех хуков в админке с возможностью тестирования.
Советы по написанию функций для хуков
1. Всегда используйте префиксы в названиях функций — например, wproot_, чтобы избежать конфликтов с другими плагинами или темами.
2. Проверяйте контекст вызова — используйте условные теги WordPress (is_admin(), is_singular(), is_front_page()), чтобы код работал только там, где нужно.
3. Если функция изменяет данные через фильтр, обязательно возвращайте изменённое значение.
4. Для тяжелых операций используйте WP-Cron, чтобы не замедлять загрузку страниц.
Заключение
Хуки — универсальный инструмент, который позволяет создавать гибкие решения в WordPress. Освоив их использование, вы сможете автоматизировать задачи, улучшить интерфейс и расширить функционал сайта без риска сломать ядро или сторонние плагины. Практикуйтесь с примерами, экспериментируйте с разными хуками, и ваш сайт станет гораздо мощнее.