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

Что такое хук woocommerce_order_status_changed и для чего он нужен

В WooCommerce есть множество хуков, которые позволяют реагировать на события в процессе обработки заказа. Один из ключевых — woocommerce_order_status_changed. Этот хук срабатывает при изменении статуса заказа, например, когда заказ переходит из статуса "в обработке" в "завершён".

Используя этот хук, можно автоматизировать задачи: отправлять уведомления, обновлять сторонние сервисы, менять данные заказа и др.

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

Часто возникает ситуация, когда нужно выполнить действие сразу после смены статуса заказа. Например:

  • Отправить заказчику ссылку на цифровой товар при смене статуса на "завершён".
  • Обновить складские остатки в CRM после смены на "выполнен".
  • Запустить кастомный скрипт для аналитики.

Использование общего хука save_post для заказов не подходит, т.к. он срабатывает слишком часто и не всегда понятно, изменился ли статус.

Пошаговое решение: как правильно подключить и использовать хук

1. Добавляем обработчик в functions.php или в плагин

add_action('woocommerce_order_status_changed', 'custom_order_status_changed_handler', 10, 4);

function custom_order_status_changed_handler($order_id, $old_status, $new_status, $order) {
    // Проверяем, что статус сменился на 'completed'
    if ($new_status === 'completed') {
        // Получаем email покупателя
        $email = $order->get_billing_email();
        // Отправляем кастомное письмо
        wp_mail($email, 'Ваш заказ выполнен', 'Спасибо за покупку! Ваш заказ №' . $order_id . ' успешно завершён.');
        // Можно добавить другие действия, например, обновление данных в CRM
    }
}

2. Объяснение параметров функции

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

3. Важные нюансы

  • Функция должна быть максимально быстрой, чтобы не замедлять процесс изменения статуса.
  • Если нужны внешние запросы, используйте очереди (wp_cron или сторонние сервисы).

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

Чтобы проверить, что обработчик сработал:

  • Измените статус любого тестового заказа в админке WooCommerce на "завершён".
  • Проверьте, что покупатель (в тестовом заказе — ваш email) получил письмо.
  • Если добавляли логику обновления, проверьте соответствующий внешний сервис или базу.

Частые ошибки при работе с хуком woocommerce_order_status_changed

  • Ошибка: Не передаёте все 4 параметра в обработчик.
    Почему: По умолчанию в add_action передаётся только 1 параметр.
    Как исправить: Указать 4 параметра явно, как в примере выше.
  • Ошибка: Отправка почты не работает.
    Почему: Не настроена почтовая функция WordPress или почта попадает в спам.
    Как исправить: Используйте SMTP-плагины или сервисы, проверяйте логи.
  • Ошибка: Медленная работа сайта после добавления кода.
    Почему: В обработчике выполняется тяжелая синхронная операция.
    Как исправить: Делать тяжелые задачи асинхронно через WP Cron или внешние очереди.

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

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

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

МетодПреимуществаНедостаткиРекомендации
Хук woocommerce_order_status_changedТочный момент смены статуса, много параметров, гибкостьНужно правильно обрабатывать параметры, нагрузка при тяжелых задачахИспользовать для легких и средних задач, тяжелые — в фон
Хук save_post для заказовПрост в использованииСрабатывает слишком часто, нет информации о смене статусаНе подходит для задач, связанных с изменением статуса
Плагины автоматизации (например, WPShop Expert Review)Готовые решения, визуальные настройкиМогут быть избыточны, влияют на скорость сайтаИспользовать при отсутствии навыков программирования
Как удалить неиспользуемые медиа файлы и оптимизировать медиабиблиотеку в WordPress
04.03.2026
Автоматический импорт товаров из YML в WordPress: пошаговое руководство
05.02.2026
Как удалить неиспользуемые метаполя в WordPress: практическое руководство
12.02.2026
Как установить и настроить OmniVideo в WordPress
27.01.2026
Как установить и настроить WPRemark для расширенного комментирования в WordPress
19.02.2026