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

Зачем использовать хук woocommerce_order_status_completed

В WooCommerce статус заказа completed означает, что оплата прошла успешно, а заказ полностью выполнен. Это оптимальное событие для запуска автоматических действий — отправки уведомлений, активации подписок, интеграции с CRM или ERP, генерации документов и так далее. Использование хука woocommerce_order_status_completed позволяет гарантировать, что действия запускаются только после успешного завершения заказа.

Диагностика проблемы: автоматизация не срабатывает после оплаты

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

Как проверить, что хук не срабатывает

  • Добавьте примитивный лог в файл или debug.log:
add_action('woocommerce_order_status_completed', function($order_id) {
    error_log('Order #'.$order_id.' completed hook triggered');
});
  • Оплатите заказ и проверьте файл wp-content/debug.log (при включенном WP_DEBUG_LOG)
  • Если записи нет — хук не сработал или код не подключен

Пошаговое решение: правильное использование хука

1. Подключение к хуку

add_action('woocommerce_order_status_completed', 'my_custom_order_completed_action', 10, 1);

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

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

    // Ваш код автоматизации
    // Например, отправка уведомления
    $to = $order->get_billing_email();
    $subject = 'Спасибо за покупку';
    $message = 'Ваш заказ #'.$order_id.' успешно выполнен.';
    wp_mail($to, $subject, $message);
}

2. Обработка ошибок и логирование

Добавьте проверку и запись ошибок, чтобы отслеживать проблемы в работе кода:

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

    $order = wc_get_order($order_id);
    if (!$order) {
        error_log('Order #'.$order_id.' not found');
        return;
    }

    $to = $order->get_billing_email();
    if (!$to) {
        error_log('Order #'.$order_id.' has no billing email');
        return;
    }

    $subject = 'Спасибо за покупку';
    $message = 'Ваш заказ #'.$order_id.' успешно выполнен.';

    if (!wp_mail($to, $subject, $message)) {
        error_log('Failed to send mail for order #'.$order_id);
    } else {
        error_log('Mail sent for order #'.$order_id);
    }
}

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

  • Разместите код в functions.php дочерней темы или в отдельном плагине
  • Оформите тестовый заказ с оплатой и доведите до статуса completed
  • Проверьте логи в wp-content/debug.log на наличие записей
  • Убедитесь, что письмо пришло на указанный email
  • Если интеграция с внешними API — проверьте выполнение запросов и ответы сервера

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

  • Использование неправильного хука: woocommerce_order_status_processing срабатывает раньше, когда оплата не подтверждена, используйте woocommerce_order_status_completed.
  • Отсутствие проверки объекта заказа: всегда проверяйте, что wc_get_order($order_id) вернул объект.
  • Ошибки в адресе электронной почты: убедитесь, что $order->get_billing_email() не пустой.
  • Кэширование: иногда кэш или плагин оптимизации задерживают выполнение, отключите кэш для админки при отладке.
  • Неактивный плагин или тема: убедитесь, что код загружается, и нет конфликтов с другими плагинами.

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

  • Не выполняйте тяжелые операции напрямую в хук, лучше делегировать задачи в фоновый режим через WP-Cron или отдельный обработчик.
  • Используйте функции WordPress для логирования, например, error_log, для отладки, но отключайте их на продакшене.
  • Если отправка писем важна, интегрируйте SMTP-плагин для надежной доставки.
  • Избегайте дублирования действий — проверяйте, что автоматизация не запустилась повторно для одного заказа.

Сравнение способов реализации автоматизации после оплаты WooCommerce

МетодПреимуществаНедостаткиКогда использовать
Хук woocommerce_order_status_completedПростота, точное срабатывание после завершения заказаНе подходит для задач, требующих асинхронностиОтправка уведомлений, триггеры бизнес-логики
WP-Cron (отложенные задачи)Выполнение тяжелых задач без блокировокЗависимость от посещаемости сайта, задержки в выполненииГенерация отчетов, интеграция с API
Внешние очереди (RabbitMQ, Redis)Высокая производительность и масштабируемостьСложность настройки, дополнительные ресурсыКрупные проекты с большим числом заказов
Как установить лимит покупок для пользователей в WordPress
25.02.2026
Как избежать проблем с задержкой платежей в WordPress
30.03.2026
Как установить лимиты на платежи в WordPress по пользователям
11.04.2026
WooCommerce: как реализовать авторизацию платежей через REST API для собственных приложений
29.05.2026
WooCommerce: устранение проблемы отсутствия подтверждения платежа при оплате картой
11.05.2026