Что такое хук 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) | Автоматизация, поддержка множества сервисов, минимальный код | Зависимость от внешних сервисов, возможные задержки | Для быстрого подключения без программирования |