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

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

Автоматизация обработки заказов позволяет снизить ручную работу, ускорить коммуникацию с клиентами и интегрировать магазин с внешними сервисами — CRM, бухгалтерией, складами. Основная задача — вовремя и корректно реагировать на смену статусов заказов, создавать дополнительные действия (уведомления, обновления метаданных, синхронизацию).

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

WooCommerce предоставляет несколько типов хуков, которые полезны для автоматизации:

  • add_action('woocommerce_order_status_changed', 'callback', 10, 4) — срабатывает при смене статуса заказа, передаёт старый и новый статусы, объект заказа;
  • add_action('woocommerce_new_order', 'callback') — срабатывает при создании нового заказа;
  • add_action('woocommerce_checkout_order_processed', 'callback', 10, 3) — после успешной обработки оформления заказа;
  • add_filter('woocommerce_email_recipient_{email_id}', 'callback', 10, 2) — для изменения получателей писем WooCommerce;
  • add_action('woocommerce_order_status_completed', 'callback') — когда заказ переходит в статус "завершён".

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

function add_custom_note_on_completed($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    $order->add_order_note('Заказ выполнен и метка добавлена автоматически');
}
add_action('woocommerce_order_status_completed', 'add_custom_note_on_completed');

Пример: отправка данных заказа в CRM при смене статуса на "обрабатывается"

function send_order_data_to_crm($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'processing') {
        $data = [
            'order_id' => $order_id,
            'total' => $order->get_total(),
            'customer_email' => $order->get_billing_email(),
            'items' => []
        ];

        foreach ($order->get_items() as $item) {
            $product = $item->get_product();
            $data['items'][] = [
                'product_id' => $product ? $product->get_id() : 0,
                'quantity' => $item->get_quantity(),
                'total' => $item->get_total(),
            ];
        }

        // Пример отправки POST-запроса в CRM
        wp_remote_post('https://crm.example.com/api/orders', [
            'body' => json_encode($data),
            'headers' => [
                'Content-Type' => 'application/json'
            ],
            'timeout' => 10
        ]);
    }
}
add_action('woocommerce_order_status_changed', 'send_order_data_to_crm', 10, 4);

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

  1. Определите ключевые статусы заказа, при которых нужно выполнять автоматические действия.
  2. Выберите подходящий хук WooCommerce (например, woocommerce_order_status_changed или конкретный статусный хук).
  3. Напишите функцию-обработчик, учитывая проверки на валидность заказа и статусов.
  4. В функции реализуйте нужную логику: добавление заметок, отправка данных, изменение метаданных.
  5. Подключите обработчик к хуку с правильным приоритетом и количеством аргументов.
  6. Разверните код на тестовом сайте и проверьте корректность работы.

Как проверить, что автоматизация работает

  • Создайте тестовый заказ и измените его статус на нужный.
  • Проверьте, добавились ли заметки к заказу или обновились ли метаданные.
  • Отследите логи веб-сервера или включите отладку WP_DEBUG_LOG для фиксации ошибок.
  • Проверьте, пришло ли уведомление в CRM или другой внешний сервис (можно использовать промежуточный лог или тестовый endpoint).

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

  • Не передаётся объект заказа в функцию: убедитесь, что в add_action указан параметр 4 для количества аргументов в woocommerce_order_status_changed.
  • Отправка данных в CRM занимает слишком много времени: используйте асинхронные запросы или WP Background Processing, чтобы не блокировать работу сайта.
  • Код срабатывает несколько раз: проверяйте текущий и предыдущий статус, чтобы избежать повторных вызовов.
  • Ошибки доступа или разрешений: убедитесь, что сервер может делать исходящие HTTP-запросы, и проверьте настройки брандмауэра.

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

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

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

МетодПлюсыМинусыКогда использовать
Хуки WooCommerce (код в functions.php или плагине)Гибкость, полный контроль, не зависит от плагиновТребует навыков разработки, возможны ошибкиДля кастомных решений и интеграций
Плагины автоматизации заказов (например, AutomateWoo)Простота настройки, готовые шаблоныПлатные, ограниченная кастомизацияДля быстрых решений без кода
Внешние сервисы и интеграции через APIМощные возможности, масштабируемостьСложность настройки, зависит от сторонних сервисовДля крупных проектов с CRM и ERP
Как создать меню выпадающего списка в WordPress с помощью PHP и JavaScript
18.12.2025
Как избежать проблем со сложными перенаправлениями в WordPress
05.08.2026
WordPress: как добавить собственные метаполя в посты
19.11.2025
Как удалить дубли страниц из XML sitemap в WordPress
21.08.2026
Как сделать автоматический отчёт по ошибкам WordPress с уведомлениями
05.03.2026