Что такое хуки в WooCommerce и зачем они нужны
Хуки (actions и filters) позволяют внедрять или изменять функциональность WooCommerce без правки исходного кода плагина. Это основной способ кастомизации поведения магазина: добавление полей, изменение вывода, интеграция с другими сервисами.
В WooCommerce используется множество хуков, которые срабатывают в ключевых точках процесса оформления заказа, отображения товаров, управления корзиной и т.д.
Диагностика: как понять, какой хук использовать
Если нужно добавить функциональность в определённое место, например, после описания товара или перед кнопкой «Добавить в корзину», нужно:
- Включить WP_DEBUG в
wp-config.phpдля вывода ошибок; - Посмотреть официальную документацию WooCommerce по хукам https://docs.woocommerce.com/document/hooks/;
- Использовать плагин
Query Monitorдля отслеживания хуков на страницах; - Временно добавить отладочный код с
do_actionилиapply_filtersс логированием.
Пошаговое решение: добавление пользовательской функции с помощью action hook
Рассмотрим практический пример: добавим под ценой товара произвольный блок с информацией о доставке.
add_action('woocommerce_single_product_summary', 'add_custom_shipping_info', 25);
function add_custom_shipping_info() {
echo '<div class="custom-shipping-info" style="margin-top:15px; font-size:14px; color:#555;">Доставка по России от 300 руб. Сроки: 2-5 дней.</div>';
}
Объяснение:
- Хук
woocommerce_single_product_summaryсрабатывает в карточке товара; - Параметр
25— приоритет, определяет порядок вывода (чем больше, тем позже); - Функция выводит HTML с информацией.
Добавление фильтра для изменения текста кнопки «Добавить в корзину»
add_filter('woocommerce_product_single_add_to_cart_text', 'custom_add_to_cart_text');
function custom_add_to_cart_text() {
return 'Купить сейчас';
}
Это меняет стандартный текст кнопки на «Купить сейчас».
Проверка результата
После внедрения кода в functions.php или в свой плагин:
- Обновите страницу товара — должен появиться блок с информацией о доставке;
- Кнопка «Добавить в корзину» должна отображать новый текст;
- При включённом WP_DEBUG ошибок не должно быть;
- Проверьте кэш, если используется — очистите;
- Для контроля можно использовать инструменты разработчика браузера (F12) для проверки DOM.
Частые ошибки и как их исправить
- Ничего не меняется после добавления кода
Причина: код добавлен не в нужное место, или активирована кеширующая система.
Решение: проверить правильность файла (functions.php активной темы или плагина), очистить кеш. - Ошибка «undefined function» или синтаксическая ошибка
Причина: опечатки или отсутствие PHP-тегов.
Решение: проверить код через PHP-валидатор, убедиться, что код в<?php ?>. - Функция срабатывает не там, где нужно
Причина: неправильный хук или приоритет.
Решение: изменить приоритет, использовать другой хук из документации. - Конфликт с другими плагинами
Причина: дублирование функций или перезаписывание хуков.
Решение: проверить конфликт отключением других плагинов, использовать уникальные имена функций.
Практические советы по безопасности и производительности
- Не добавляйте тяжелые операции внутри хуков, особенно на фронтенде — используйте асинхронные запросы или cron-задачи.
- Всегда проверяйте, что пользователь имеет права на выполнение действия, если добавляете обработчики форм.
- Для больших кастомизаций лучше создавать отдельный плагин, а не добавлять код в functions.php, чтобы избежать потери при смене темы.
- Используйте префиксы в именах функций и классов, чтобы избежать коллизий.
Сравнение способов добавления пользовательских функций в WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| functions.php темы | Код добавляется в файл текущей темы | Просто и быстро | Потеря при смене темы, трудно масштабировать |
| Отдельный плагин | Создание собственного плагина с хуками | Безопасно, переносимо, удобно поддерживать | Требует базовых знаний плагинов |
| Пользовательские плагины WooCommerce | Использование готовых плагинов для кастомизации | Ускоряет разработку, поддержка | Может быть избыточным или конфликтовать |