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

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

Автоматизация обработки заказов позволяет снизить ручной труд, минимизировать ошибки и ускорить выполнение бизнес-процессов. Например, можно автоматически менять статус заказа, отправлять уведомления или запускать внешние интеграции при изменении его состояния.

Типичные задачи, решаемые с помощью хуков WooCommerce:

  • Автоматическое изменение статуса заказа после оплаты
  • Отправка кастомных уведомлений сотрудникам или клиентам
  • Интеграция с CRM или складскими системами через API
  • Обновление метаданных заказа для последующего анализа

Основные хуки WooCommerce для обработки заказов

Хук woocommerce_order_status_changed

Вызывается при изменении статуса заказа. Позволяет получить старый и новый статус, ID заказа и объект заказа.

add_action('woocommerce_order_status_changed', 'custom_order_status_changed', 10, 4);
function custom_order_status_changed($order_id, $old_status, $new_status, $order) {
    // Ваш код обработки
}

Хук woocommerce_payment_complete

Срабатывает при успешном завершении оплаты. Часто используется для запуска последующих операций.

add_action('woocommerce_payment_complete', 'custom_payment_complete');
function custom_payment_complete($order_id) {
    $order = wc_get_order($order_id);
    // Действия после оплаты
}

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

Задача: при смене статуса заказа на "выполнен" отправить письмо менеджеру и обновить метаданные заказа.

  1. Подключаемся к хуку woocommerce_order_status_changed.
  2. Проверяем, что новый статус — completed.
  3. Обновляем метаданные заказа для фиксации времени.
  4. Отправляем email менеджеру.
add_action('woocommerce_order_status_changed', 'auto_process_completed_order', 10, 4);
function auto_process_completed_order($order_id, $old_status, $new_status, $order) {
    if ('completed' === $new_status) {
        // Обновляем метаданные
        $order->update_meta_data('_completed_timestamp', current_time('mysql'));
        $order->save();

        // Отправляем письмо менеджеру
        $to = 'manager@example.com';
        $subject = 'Заказ #' . $order_id . ' выполнен';
        $message = 'Заказ #' . $order_id . ' был успешно выполнен. Сумма: ' . $order->get_total();
        wp_mail($to, $subject, $message);
    }
}

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

Для проверки выполните следующие шаги:

  • Создайте тестовый заказ в WooCommerce.
  • Измените статус заказа на "выполнен" вручную через админку.
  • Проверьте, что в метаданных заказа появилось поле _completed_timestamp с текущим временем (через phpMyAdmin или плагин для просмотра метаданных).
  • Убедитесь, что менеджер получил письмо (проверьте папку входящих или логи сервера почты).

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

  • Письмо не отправляется: Проверьте настройки wp_mail и работу SMTP сервера. Временно добавьте error_log для отладки.
  • Метаданные не сохраняются: Убедитесь, что вызван $order->save() после update_meta_data().
  • Хук не срабатывает: Проверьте, что функция зарегистрирована без ошибок и приоритет 10 достаточно высокий.

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

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

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

МетодПлюсыМинусы
wp_mail напрямуюПростота, встроено в WPЗависит от настройки почты, может попадать в спам
SMTP плагин (например WP Mail SMTP)Надежная доставка, логированиеТребуется установка плагина
Интеграция с внешним сервисом (SendGrid, Mailgun)Высокая надежность, аналитикаСложность настройки, возможные дополнительные расходы
Как установить и настроить выравнивание изображений в WordPress правильно
13.11.2025
Как настроить автоматическое удаление старого файлового кеша в WordPress
04.04.2026
Как отладить проблемы с загрузкой PHP-модулей в WordPress
20.01.2026
Как правильно настроить кэширование в WordPress на WP-Host
05.01.2026
Как установить и настроить лимит на число одновременных AJAX-запросов в WordPress
27.04.2026