Что такое хуки в WooCommerce и зачем они нужны
WooCommerce расширяет функционал WordPress, предоставляя собственные хуки — actions и filters, с помощью которых можно вмешиваться в процесс обработки заказов, товаров, оплаты и других событий. Это позволяет автоматизировать задачи без изменения исходного кода плагина, что гарантирует совместимость с обновлениями.
Диагностика: как определить место для внедрения кода
Перед добавлением собственного кода важно понять, в какой момент нужно сработать. Например, если нужно изменить статус заказа после оплаты, ищем хуки, связанные с платежом. Для этого:
- Изучите документацию WooCommerce по хукам: официальный список хуков.
- Включите режим отладки и логирования событий с помощью плагина Query Monitor или Debug Bar, чтобы отследить вызовы функций.
- Используйте на локальной установке функцию
do_actionиapply_filtersс собственными обработчиками для тестов.
Пошаговое решение: пример автоматического изменения статуса заказа после оплаты
Задача: после успешной оплаты заказа автоматически менять статус на «обрабатывается» и отправлять уведомление менеджеру.
1. Подключаем обработчик к хуку woocommerce_payment_complete
add_action('woocommerce_payment_complete', 'wpplugin_change_order_status_and_notify');
function wpplugin_change_order_status_and_notify($order_id) {
if (!$order_id) {
return;
}
$order = wc_get_order($order_id);
if (!$order) {
return;
}
// Меняем статус на 'processing'
$order->update_status('processing', 'Автоматическое обновление статуса после оплаты.');
// Отправляем email менеджеру
$to = 'manager@example.com';
$subject = 'Новый оплаченный заказ #'.$order_id;
$message = 'Заказ #'.$order_id.' успешно оплачен и переведен в статус Обрабатывается.';
wp_mail($to, $subject, $message);
}2. Добавляем код в файл functions.php темы или в кастомный плагин
Используйте дочернюю тему или отдельный плагин, чтобы изменения сохранялись после обновления WooCommerce.
3. Тестирование
Создайте тестовый заказ и оплатите его через тестовый платежный шлюз. Проверьте, что статус изменился на «обрабатывается» и менеджер получил письмо.
Проверка результата после внедрения
Для проверки используйте следующие методы:
- В админке WooCommerce в разделе «Заказы» убедитесь, что статус изменился автоматически.
- Проверьте почту менеджера на наличие уведомления.
- Включите WP_DEBUG и WP_DEBUG_LOG в
wp-config.phpи при необходимости добавьте логирование внутри функции черезerror_log().
Частые ошибки и как их исправить
- Функция не срабатывает: проверьте правильность имени хука и что код подключен (например, в functions.php дочерней темы).
- Почта не отправляется: убедитесь, что на сервере настроен SMTP, или используйте плагин WP Mail SMTP.
- Не тот статус устанавливается: проверьте, что статус поддерживается WooCommerce (список статусов можно посмотреть в документации или через
wc_get_order_statuses()). - Конфликты с другими плагинами: временно отключите другие плагины и протестируйте работу кода.
Практические советы по безопасности и производительности
- Не используйте глобальные функции вне пространства имён, если пишете плагин — чтобы избежать конфликтов.
- Минимизируйте объем отправляемых писем — добавляйте проверки, чтобы не дублировать уведомления.
- Добавляйте кеширование, если в хуках есть дорогостоящие операции (например, запросы к внешним API).
- Используйте
wp_mail()с правильными заголовками для корректной доставки. - Размещайте код в специализированных плагинах, а не в functions.php, если планируете перенос или распространение.
Сравнение вариантов реализации автоматизации задач в WooCommerce
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Использование хуков (actions/filters) | Гибко, нативно, без сторонних зависимостей | Требует знаний PHP, возможны конфликты | Код выше |
| Плагины автоматизации (например, AutomateWoo) | Удобный интерфейс, много готовых сценариев | Платные, дополнительная нагрузка | Автоматизация без кода |
| Внешние сервисы через Webhooks | Интеграция с CRM, внешними API | Зависимость от внешних сервисов | Настройка в WooCommerce > Settings > Advanced |