Использование хука woocommerce_new_order для интеграции с внешними сервисами

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

Хук woocommerce_new_order срабатывает сразу после создания нового заказа в WooCommerce. Его основное назначение — запуск дополнительной логики сразу после оформления заказа. Например, отправка данных о заказе во внешнюю CRM, учетную систему или службу доставки. В отличие от других хуков, он передает ID созданного заказа, что упрощает получение всех деталей через API WooCommerce.

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

Если после оформления заказа данные не доходят до внешнего сервиса, проверьте:

  • Правильность подключения функции к хуку woocommerce_new_order в вашем плагине или functions.php.
  • Корректность формирования данных: используйте методы WC_Order для получения информации.
  • Наличие ошибок при отправке (например, через wp_remote_post или curl).
  • Логи сервера и отладочную информацию WordPress (например, включенный WP_DEBUG).

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

1. Подключаем функцию к хуку

add_action('woocommerce_new_order', 'send_order_data_to_external_service', 10, 1);

2. Реализуем функцию отправки

function send_order_data_to_external_service($order_id) {
    if (!$order_id) {
        return;
    }

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

    // Формируем массив данных для отправки
    $data = [
        'order_id' => $order->get_id(),
        'customer_email' => $order->get_billing_email(),
        'total' => $order->get_total(),
        'items' => []
    ];

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

    // Отправляем POST-запрос во внешний API
    $response = wp_remote_post('https://example.com/api/orders', [
        'method' => 'POST',
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer YOUR_API_TOKEN'
        ],
        'body' => wp_json_encode($data),
        'timeout' => 15
    ]);

    if (is_wp_error($response)) {
        error_log('Ошибка отправки заказа ' . $order_id . ': ' . $response->get_error_message());
        return;
    }

    $code = wp_remote_retrieve_response_code($response);
    if ($code !== 200) {
        error_log('Ответ сервера для заказа ' . $order_id . ': HTTP ' . $code);
    }
}

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

1. Создайте тестовый заказ в WooCommerce.

2. Проверьте логи PHP и WP_DEBUG, чтобы убедиться, что ошибок нет.

3. Убедитесь, что внешний сервис получил данные (проверьте логи или интерфейс API).

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

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

  • Не подключена функция к хуку — проверьте, что add_action вызывается в правильном месте, например, в functions.php или в активном плагине.
  • Передача некорректного параметра — хук получает ID заказа, а не объект, используйте wc_get_order($order_id) для получения объекта.
  • Проблемы с внешним API — неверный URL, отсутствует токен авторизации, или неправильный формат данных. Проверьте документацию API и используйте инструменты типа Postman для теста.
  • Отсутствие обработки ошибок — добавьте проверку результата запроса и логи для отладки.
  • Замедление оформления заказа — если отправка данных занимает много времени, рассмотрите выполнение запроса асинхронно, например, через WP-Cron или очередь задач.

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

  • Не храните токены и ключи API в открытом виде — используйте константы в wp-config.php или параметры настроек плагина.
  • Обрабатывайте ошибки запроса и логируйте их для своевременного реагирования.
  • Если интеграция критична, используйте очередь на базе WP-Cron для отложенной отправки, чтобы не замедлять процесс оформления заказа.
  • Ограничьте права доступа к функциям интеграции, чтобы избежать запуска с неправильных хуков.
  • Тестируйте интеграцию в режиме отладки, отключая кеширование и используя тестовые заказы.

Сравнение вариантов интеграции: плагин vs код vs сторонние сервисы

ВариантПреимуществаНедостаткиКогда использовать
Собственный код на хуке woocommerce_new_orderМаксимальный контроль, легкая кастомизация, бесплатное решениеТребует навыков разработки, возможны ошибки, нагрузка на серверКогда нужен простой, индивидуальный интеграционный сценарий
Готовые плагины интеграцииПростота установки, поддержка, обновленияМожет быть избыточным, не всегда подходят под специфические задачиДля стандартных интеграций с популярными сервисами
Сторонние сервисы (Webhook, Zapier)Автоматизация, поддержка множества сервисов, минимальный кодЗависимость от внешних сервисов, возможные задержкиДля быстрого подключения без программирования
Как создать динамические таблицы в WordPress с помощью шорткода
11.01.2026
Автоматическое отключение отзывов для отдельных товаров WooCommerce
03.06.2026
Как удалить варианты товаров WooCommerce по условию и избежать ошибок
26.05.2026
Как использовать хуки в WordPress для расширения функциональности
23.11.2025
Как создать автоматические снимки (thumbnail) для изображений в WordPress
30.03.2026