Как использовать хук WooCommerce order status change для автоматизации

Проблема: как автоматически реагировать на смену статуса заказа в WooCommerce

В WooCommerce часто требуется запускать определённые процессы при изменении статуса заказа: отправлять кастомные уведомления, интегрироваться с CRM, менять метаданные заказа или запускать сторонние сервисы. Без прямой обработки событий это приходится делать вручную или с помощью громоздких плагинов, что не всегда удобно и эффективно.

Почему стандартных настроек WooCommerce недостаточно

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

Диагностика: как понять, что хук работает неверно

  • Ваш кастомный код не выполняется при смене статуса заказа.
  • Код выполняется, но с задержкой или не для всех статусов.
  • Возникают ошибки PHP или конфликты с другими плагинами.

Для диагностики рекомендуется включить WP_DEBUG и просмотреть логи ошибок, а также проверить, что ваш код подключён и активен.

Пошаговое решение: использование хука woocommerce_order_status_changed

Этот хук срабатывает при любом изменении статуса заказа и передаёт параметры для детальной обработки.

add_action('woocommerce_order_status_changed', 'custom_on_order_status_change', 10, 4);
function custom_on_order_status_change($order_id, $old_status, $new_status, $order) {
    // Проверяем изменение на нужный статус
    if ($new_status === 'completed') {
        // Например, добавляем мета-данные или отправляем письмо
        update_post_meta($order_id, '_custom_completed_time', current_time('mysql'));
        // Логируем для отладки
        error_log("Order #$order_id статус изменён на completed");
    }
}

Ключевые моменты:

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

Пример отправки кастомного письма при смене статуса на processing

add_action('woocommerce_order_status_changed', 'send_custom_email_on_processing', 10, 4);
function send_custom_email_on_processing($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ в обработке';
        $message = 'Спасибо за покупку! Ваш заказ №' . $order_id . ' сейчас обрабатывается.';
        wp_mail($to, $subject, $message);
    }
}

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

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа вручную (через админку или программно).
  • Проверьте, что выполняются нужные действия (например, добавление мета, отправка письма).
  • Просмотрите лог ошибок WordPress (обычно wp-content/debug.log), если включён режим отладки.

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

  • Код не выполняется: проверьте, что ваш хук добавлен в файл functions.php или в плагин, и что этот файл загружается.
  • Параметры функции не совпадают: функция должна принимать 4 аргумента, иначе данные будут неполными.
  • Письма не отправляются: убедитесь, что wp_mail настроена правильно и сервер поддерживает отправку почты.
  • Конфликты с другими плагинами: попробуйте временно отключить другие плагины и проверить работу хука.

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

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

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

МетодПреимуществаНедостаткиКогда использовать
use hook woocommerce_order_status_changedМаксимальная гибкость, полный контрольТребует знаний PHP, может влиять на производительность при тяжелом кодеДля кастомных сценариев автоматизации
Плагины автоматизации WooCommerceЛегко использовать, готовые функцииМеньшая гибкость, могут конфликтоватьБыстрая настройка без кода
Использование сторонних сервисов (Zapier и др.)Интеграции с внешними системамиЗависимость от внешних сервисов, задержкиДля интеграции с CRM и маркетингом
Как избежать конфликтов между плагинами WordPress: практические советы и примеры кода
09.11.2025
WooCommerce: автоматическое удаление неактивных заказов по расписанию
26.06.2026
Как создать автоматический импорт курсов из внешнего источника в WordPress
11.04.2026
Как создать автоматический excerpt для курсов в WordPress
18.01.2026
Как создать настройки плагина WordPress с использованием Options API
01.11.2025