Как использовать WooCommerce хуки для автоматизации управления заказами

Диагностика задачи: зачем нужны хуки для управления заказами в 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_changed 10 — оптимально.
  • Изменения не сохраняются: всегда вызывайте $order->save() после внесения изменений.
  • Удаление товаров не работает: проверяйте логи, возможно, другие плагины блокируют изменение заказа.
  • Ошибки PHP при работе с объектом заказа: убедитесь, что в функцию передаётся объект WC_Order, а не ID. В хуке woocommerce_order_status_changed он передаётся в 4-м аргументе.

Практические советы по безопасности и производительности

  • Не используйте тяжелые операции в хуках, вызываемых часто, чтобы не замедлять обработку.
  • Для сложных автоматизаций можете вынести логику в отдельные классы и методы — так легче поддерживать код.
  • Проверяйте права пользователя, если запускаете код по действиям из админки.
  • Включайте логирование в режиме разработки для отладки хуков.

Сравнение способов автоматизации управления заказами

МетодПлюсыМинусыПример
Хуки WooCommerce
(код)
Гибкость, без плагинов, быстрая обработкаТребует навыков PHP, возможны конфликтыwoocommerce_order_status_changed
Плагины автоматизации
(например, AutomateWoo)
Удобный UI, много готовых сценариевДополнительная нагрузка, платные версииАвтоматическое уведомление
Вебхуки и интеграции с CRMИнтеграция с внешними системамиСложность настройки, задержки в обработкеОтправка данных в CRM при заказе
Решение проблемы нестандартных типов полей в WordPress
07.12.2025
Как избежать конфликтов из-за AJAX-запросов в WordPress
07.04.2026
Как создать и использовать кастомные таксономии в WordPress
16.03.2026
Как удалить метаданные из изображений в WordPress для ускорения сайта
14.12.2025
Автоматическое отключение пингов и пингбэков в WordPress
08.03.2026