Диагностика задачи: зачем нужны хуки для управления заказами в WooCommerce
WooCommerce предоставляет обширную систему хуков (actions и filters), позволяющих автоматизировать процессы при изменениях статуса заказа, обновлении данных клиента, добавлении товаров и прочих событиях. Автоматизация помогает снизить время ручной обработки, уменьшить ошибки и улучшить клиентский сервис.
Чаще всего нужно реагировать на смену статуса заказа, чтобы, например, отправить нестандартное уведомление, обновить сторонние системы или изменить данные заказа.
Основные хуки WooCommerce для работы с заказами
Для автоматизации управления заказами чаще всего используются следующие хуки:
woocommerce_order_status_changed— вызывается при смене любого статуса заказа;woocommerce_order_status_completed— срабатывает при переходе заказа в статус «завершён»;woocommerce_new_order— срабатывает при создании нового заказа;woocommerce_order_before_save— вызывается перед сохранением изменений заказа;woocommerce_checkout_order_processed— вызывается после оформления заказа.
Пример: автоматическое добавление заметки при смене статуса заказа
add_action('woocommerce_order_status_changed', 'add_order_note_on_status_change', 10, 4);
function add_order_note_on_status_change($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed') {
$order->add_order_note('Заказ автоматически помечен как завершён.');
}
}
Пошаговое решение: как добавить автоматическое удаление товаров из заказа при смене статуса
Задача: при переходе заказа в статус cancelled автоматически удалить товары, чтобы освободить склад.
Шаг 1. Подключаемся к хуку смены статуса
add_action('woocommerce_order_status_changed', 'remove_items_on_cancelled', 10, 4);
Шаг 2. Реализуем функцию удаления товаров
function remove_items_on_cancelled($order_id, $old_status, $new_status, $order) {
if ($new_status === 'cancelled') {
foreach ($order->get_items() as $item_id => $item) {
$order->remove_item($item_id);
}
$order->calculate_totals();
$order->save();
}
}
Шаг 3. Проверяем работу
Перейдите в админку WooCommerce, откройте заказ и смените его статус на cancelled. После сохранения в заказе не должно остаться товаров.
Проверка результата после внедрения
- Сделайте тестовый заказ через фронтенд сайта.
- В админке измените статус заказа согласно логике (например, на
cancelled). - Проверьте, что товары удалились — откройте детали заказа, убедитесь, что список товаров пуст.
- Для добавления заметок — проверьте, что появилась нужная запись в логе заказа.
Частые ошибки и как их исправить
- Хук не срабатывает: убедитесь, что используете правильный приоритет. Например, для
woocommerce_order_status_changed10 — оптимально. - Изменения не сохраняются: всегда вызывайте
$order->save()после внесения изменений. - Удаление товаров не работает: проверяйте логи, возможно, другие плагины блокируют изменение заказа.
- Ошибки PHP при работе с объектом заказа: убедитесь, что в функцию передаётся объект
WC_Order, а не ID. В хукеwoocommerce_order_status_changedон передаётся в 4-м аргументе.
Практические советы по безопасности и производительности
- Не используйте тяжелые операции в хуках, вызываемых часто, чтобы не замедлять обработку.
- Для сложных автоматизаций можете вынести логику в отдельные классы и методы — так легче поддерживать код.
- Проверяйте права пользователя, если запускаете код по действиям из админки.
- Включайте логирование в режиме разработки для отладки хуков.
Сравнение способов автоматизации управления заказами
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Хуки WooCommerce (код) | Гибкость, без плагинов, быстрая обработка | Требует навыков PHP, возможны конфликты | woocommerce_order_status_changed |
| Плагины автоматизации (например, AutomateWoo) | Удобный UI, много готовых сценариев | Дополнительная нагрузка, платные версии | Автоматическое уведомление |
| Вебхуки и интеграции с CRM | Интеграция с внешними системами | Сложность настройки, задержки в обработке | Отправка данных в CRM при заказе |