Хуки в WordPress — это один из самых мощных и гибких способов расширить функциональность сайта без изменения исходного кода ядра CMS. Они позволяют встроиться в процесс загрузки и работы сайта, добавляя или изменяя поведение в нужных местах. В этой статье мы подробно разберём, как использовать хуки — действия (actions) и фильтры (filters) — с примерами кода и практическими советами.
Что такое хуки в WordPress: actions и filters
Хуки — это точки расширения внутри кода WordPress, которые вызываются в определённые моменты работы движка. Существует два основных типа хуков:
- Actions (действия) — позволяют выполнить собственный код в момент вызова хука. С помощью actions вы можете добавлять дополнительные функции, выполнять запросы, изменять логику после загрузки страницы, при сохранении записи и т.д.
- Filters (фильтры) — позволяют изменить данные перед их выводом или использованием. Фильтры принимают на вход значение, модифицируют его по вашему коду и возвращают обратно.
Оба типа хуков работают по похожему принципу — вы регистрируете функцию-обработчик, которая будет вызвана при срабатывании соответствующего хука.
Как зарегистрировать и использовать хуки: базовые примеры
Для регистрации обработчика на action или filter используются функции add_action() и add_filter(). Синтаксис похож:
add_action( 'hook_name', 'wpsell_handle_hook_function', 10, 2 );
add_filter( 'hook_name', 'wpsell_modify_data_function', 10, 1 );Параметры:
hook_name— имя хука, на который вы подписываетесь.wpsell_handle_hook_function— имя вашей функции-обработчика.- 10 — приоритет вызова (чем меньше число, тем раньше сработает).
- 2 — количество аргументов, которые передаются вашей функции.
Рассмотрим простой пример добавления произвольного текста в подвал сайта с помощью action wp_footer:
function wpsell_handle_hook_function() {
echo '<p style="text-align:center; font-size:14px; color:#666;">Спасибо за посещение сайта!</p>';
}
add_action( 'wp_footer', 'wpsell_handle_hook_function' );Этот код добавит в футер сайта ваше сообщение.
Пример фильтра для изменения заголовка страницы
Используем фильтр the_title, чтобы добавить префикс ко всем заголовкам записей:
function wpsell_modify_data_function( $title ) {
return '🔥 ' . $title;
}
add_filter( 'the_title', 'wpsell_modify_data_function' );Так вы сможете динамически менять выводимые данные без изменения шаблонов.
Практические примеры использования хуков для решения задач
1. Автоматическое добавление мета-тега viewport для мобильных устройств
Добавим мета-тег в <head> с помощью хука wp_head:
function wpsell_add_viewport_meta() {
echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
}
add_action( 'wp_head', 'wpsell_add_viewport_meta' );Это улучшит мобильную адаптивность сайта без изменения темы.
2. Отключение эмодзи для ускорения загрузки
WordPress по умолчанию загружает скрипты для эмодзи, которые не всегда нужны. Отключим их через фильтр:
function wpsell_disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
}
add_action( 'init', 'wpsell_disable_emojis' );Это простой способ оптимизировать производительность.
3. Изменение текста кнопки "Добавить в корзину" в WooCommerce
Используем фильтр woocommerce_product_add_to_cart_text для замены текста:
function wpsell_custom_add_to_cart_text() {
return 'Купить сейчас';
}
add_filter( 'woocommerce_product_add_to_cart_text', 'wpsell_custom_add_to_cart_text' );Так вы можете адаптировать интерфейс под задачи вашего магазина.
Создание собственных хуков для расширения темы или плагина
Иногда нужно добавить собственные точки расширения в свой код — например, в теме или плагине. Это позволит другим разработчикам подключать свои функции.
Для создания action-хука используйте функцию do_action():
do_action( 'wpsell_custom_action_hook', $param1, $param2 );Для фильтра — apply_filters():
$value = apply_filters( 'wpsell_custom_filter_hook', $value, $param );Пример создания собственного action в шаблоне:
function wpsell_theme_before_content() {
do_action( 'wpsell_before_content' );
}
// Вызов в шаблоне
wpsell_theme_before_content();Другие разработчики смогут подключиться к этому хуку:
add_action( 'wpsell_before_content', 'wpsell_custom_banner' );
function wpsell_custom_banner() {
echo '<div class="custom-banner">Добро пожаловать!</div>';
}Советы по работе с хуками: производительность и отладка
Хуки — мощный инструмент, но нужно использовать их разумно:
- Не добавляйте тяжелую логику в хуки, вызываемые на каждой загрузке страницы.
- Используйте приоритеты, чтобы избежать конфликтов между плагинами.
- Для отладки хуков применяйте плагины типа Query Monitor или Debug Bar, чтобы видеть, какие хуки срабатывают и в каком порядке.
- Избегайте дублирования функций при регистрации хуков — проверяйте, не подключены ли они уже.
Кроме того, для комплексного управления хуками можно использовать плагин Clearfy Pro, который позволяет отключать ненужные хуки и оптимизировать сайт.
Выводы и рекомендации по использованию хуков в WordPress
Хуки — это основа для кастомизации WordPress без изменения ядра. С их помощью можно:
- Добавлять новые функции и блоки контента.
- Изменять вывод данных и поведение плагинов.
- Оптимизировать и улучшать UX, не ломая обновления.
Освоив хуки, вы получите мощный инструмент для профессиональной разработки на WordPress.