Диагностика задачи: зачем автоматизировать обработку заказов в 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);
// Действия после оплаты
}
Пошаговое решение: автоматическое изменение статуса и отправка уведомления
Задача: при смене статуса заказа на "выполнен" отправить письмо менеджеру и обновить метаданные заказа.
- Подключаемся к хуку
woocommerce_order_status_changed. - Проверяем, что новый статус —
completed. - Обновляем метаданные заказа для фиксации времени.
- Отправляем 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) | Высокая надежность, аналитика | Сложность настройки, возможные дополнительные расходы |