wpmake.ru wordpress WPMake

Как использовать хук action WooCommerce order status changed для кастомных действий

Что такое хук action WooCommerce order status changed и зачем он нужен

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

Диагностика: почему мои действия при смене статуса заказа не срабатывают

Если вы добавили обработчик на woocommerce_order_status_changed, но он не выполняется, проверьте следующие моменты:

  • Правильно ли подключен код — находится ли он в functions.php темы или в плагине?
  • Используете ли правильный синтаксис функции add_action?
  • Совпадает ли количество аргументов в callback с тем, что передает хук (4 аргумента)?
  • Не блокируется ли выполнение кода другими плагинами или ошибками PHP?

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

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

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

function custom_order_status_changed_action($order_id, $old_status, $new_status, $order) {
    // Проверяем, что заказ получен корректно
    if (!$order instanceof WC_Order) {
        $order = wc_get_order($order_id);
    }

    // Пример: логируем изменение статуса в файл
    $log_entry = sprintf("Order #%d status changed from %s to %s\n", $order_id, $old_status, $new_status);
    error_log($log_entry, 3, WP_CONTENT_DIR . '/order-status.log');

    // Допустим, отправляем письмо при переходе в статус completed
    if ($new_status === 'completed') {
        $to = $order->get_billing_email();
        $subject = 'Ваш заказ завершен';
        $message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' успешно завершен.';
        wp_mail($to, $subject, $message);
    }
}

2. Проверяем работу кода

Измените статус любого заказа в админке WooCommerce. После этого:

  • Проверьте файл wp-content/order-status.log — должна появиться запись с изменением статуса.
  • Если статус изменился на completed, на электронную почту покупателя должно прийти письмо.

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

Чтобы убедиться, что ваш обработчик работает корректно, используйте следующий чек-лист:

  1. Измените статус заказа вручную через админку WooCommerce.
  2. Проверьте наличие записи в лог-файле, указанном в коде.
  3. Проверьте почтовый ящик покупателя (или укажите свой адрес в коде для теста).
  4. Посмотрите в консоль ошибок сервера, нет ли ошибок PHP.

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

  • Неправильное количество аргументов в функции: хук передает 4 параметра, если в add_action указано меньше, часть данных не попадет в функцию.
  • Ошибка в условии проверки объекта заказа: если не получить объект заказа через wc_get_order, код упадет.
  • Использование wp_mail без настройки SMTP: письма не отправятся без корректной почтовой конфигурации.
  • Кэширование или плагины безопасности: они могут блокировать выполнение кода или отправку писем.

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

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

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

МетодПреимуществаНедостатки
Хук woocommerce_order_status_changedПрямой доступ к информации о заказе, гибкостьНужно писать код, возможны ошибки при неправильном использовании
Плагины автоматизации (например, AutomateWoo)Удобный интерфейс, множество готовых триггеров и действийМожет быть избыточным и создавать нагрузку, платные функции
Использование REST API для отслеживания заказовВозможность интеграции с внешними сервисамиСложнее в реализации, требует периодического опроса или вебхуков
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙