Как использовать хук WooCommerce 'woocommerce_order_status_changed' для автоматизации задач

Диагностика задачи: зачем нужен хук 'woocommerce_order_status_changed'

В WooCommerce часто требуется запускать определённые действия при смене статуса заказа — например, отправлять уведомления, обновлять сторонние сервисы, запускать внутренние процессы. Хук woocommerce_order_status_changed позволяет перехватить это событие и выполнить кастомный код.

Проверить, срабатывает ли хук, можно, добавив простой лог или уведомление:

add_action('woocommerce_order_status_changed', function($order_id, $old_status, $new_status, $order) {
    error_log("Order #$order_id status changed from $old_status to $new_status");
}, 10, 4);

После смены статуса заказа в логе сервера должна появиться соответствующая запись.

Пошаговое решение: как реализовать автоматизацию

1. Подключаем хук и принимаем параметры

Хук предоставляет четыре аргумента:

  • $order_id — ID заказа
  • $old_status — предыдущий статус
  • $new_status — новый статус
  • $order — объект WC_Order

Подключаемся, указав 4 параметра:

add_action('woocommerce_order_status_changed', 'my_custom_order_status_action', 10, 4);
function my_custom_order_status_action($order_id, $old_status, $new_status, $order) {
    // ваш код
}

2. Добавляем условие для конкретного перехода

Например, хотим выполнить действие, когда заказ меняет статус с processing на completed:

if ($old_status === 'processing' && $new_status === 'completed') {
    // выполняем автоматизацию
}

3. Пример: отправка кастомного email при смене статуса

Отправим письмо клиенту с дополнительной информацией:

if ($old_status === 'processing' && $new_status === 'completed') {
    $to = $order->get_billing_email();
    $subject = 'Ваш заказ завершён';
    $message = 'Здравствуйте! Ваш заказ #' . $order_id . ' успешно завершён. Спасибо за покупку.';
    wp_mail($to, $subject, $message);
}

4. Пример: интеграция с внешним API

Отправим данные заказа в CRM при смене на статус completed:

if ($new_status === 'completed') {
    $data = [
        'order_id' => $order_id,
        'total' => $order->get_total(),
        'email' => $order->get_billing_email(),
    ];
    wp_remote_post('https://example-crm.ru/api/order', [
        'body' => json_encode($data),
        'headers' => ['Content-Type' => 'application/json'],
    ]);
}

Проверка результата после внедрения

  • Сделайте тестовый заказ в WooCommerce
  • Переведите заказ в нужный статус (например, из processing в completed) вручную в админке
  • Проверьте логи сервера, почту, внешние сервисы — должны появиться ожидаемые действия
  • Для отладки используйте error_log() или плагины для логирования (например, WP Log Viewer)

Частые ошибки и как их исправить

  • Хук не срабатывает
    — Убедитесь, что статус действительно меняется именно через WooCommerce, а не напрямую в базе.
    — Проверьте, что функция подключена и нет конфликтов с другими плагинами.
  • Отсутствие параметров в функции
    — Обязательно укажите количество принимаемых параметров в add_action (четыре в нашем случае).
  • Почта не отправляется
    — Проверьте работу функции wp_mail отдельно.
    — Убедитесь в корректности SMTP настроек сервера.
  • Ошибки в запросах к API
    — Проверьте URL и формат данных.
    — Используйте функцию wp_remote_get или wp_remote_post с правильными заголовками.

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

  • Не выполняйте тяжёлые операции напрямую в хуке — лучше использовать отложенный запуск через WP-Cron или очереди для масштабируемости.
  • Обрабатывайте ошибки внешних вызовов (API) и логируйте неудачи.
  • Если отправляете письма, используйте проверенные SMTP сервисы для надежности.
  • Избегайте дублирования действий при повторных сменах статуса — храните флаги в метаданных заказа.

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

МетодПреимуществаНедостатки
Хук woocommerce_order_status_changedПрямой доступ к изменению статуса, множество параметровВызов при каждом изменении, может тормозить при тяжёлых задачах
WP-Cron с проверкой статусовАсинхронность, можно планировать задачиЗадержки срабатывания, зависит от посещений сайта
Вебхуки WooCommerceИнтеграция с внешними сервисами без кодаОграничена настраиваемость, нужен внешний обработчик
Как удалить автоматические ревизии в WordPress для оптимизации базы данных
30.01.2026
Как удалить комментарии из базы данных WordPress без потери данных
05.04.2026
Как реализовать двойной вызов функций в WordPress
27.02.2026
Как исправить ошибку WooCommerce "Invalid security nonce" при оформлении заказа
30.05.2026
Как создать автоматический импорт отзывов в WordPress с помощью WPRemark
24.01.2026