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

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

В стандартной работе WooCommerce после успешной оплаты корзина пользователя обычно очищается. Однако бывают ситуации, когда товар остается в корзине, что может приводить к путанице и повторным заказам. Чаще всего это происходит из-за:

  • Кастомных плагинов, которые изменяют процесс оформления заказа;
  • Ошибок в теме или хуках, которые нарушают стандартное поведение;
  • Кэширования страниц корзины и оформления заказа;
  • Использования нестандартных методов оплаты, которые не корректно обрабатываются;
  • Ошибок в сессии пользователя.

Шаги для решения: как принудительно очищать корзину после успешной оплаты

Чтобы гарантированно очищать корзину после завершения заказа, можно использовать хук woocommerce_thankyou. Этот хук срабатывает на странице благодарности после успешного оформления заказа.

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

add_action('woocommerce_thankyou', 'custom_clear_cart_after_payment', 10, 1);
function custom_clear_cart_after_payment($order_id) {
    if (!$order_id) {
        return;
    }

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

    // Проверяем статус заказа
    if ($order->has_status('completed') || $order->has_status('processing')) {
        WC()->cart->empty_cart();
    }
}

Объяснение:

  • Функция вызывается после оплаты;
  • Проверяем, что заказ существует и имеет статус completed или processing (стандартные статусы для оплаченных заказов);
  • Если условие выполняется, корзина очищается функцией WC()->cart->empty_cart();.

Важные моменты

  • Хук woocommerce_thankyou срабатывает на странице благодарности. Если у пользователя не происходит переход на эту страницу (например, оплата через внешний сервис с редиректом), код может не сработать.
  • Для платежных шлюзов, которые используют вебхуки или обработчики в фоне, синхронизация корзины может потребовать другого подхода.

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

Для проверки выполните следующие шаги:

  1. Добавьте товары в корзину.
  2. Оформите заказ и завершите оплату через доступный метод.
  3. На странице благодарности убедитесь, что корзина пуста (например, обновите страницу корзины или перейдите в админ-панель пользователя).

Если корзина не очищается, проверьте консоль браузера на ошибки JS, отключите временно сторонние плагины, влияющие на процесс заказа, и повторите тест.

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

  • Код не срабатывает из-за кеширования страниц. Решение: отключите кеш для страницы благодарности и корзины, или добавьте исключения в настройки кеш-плагина.
  • Оплата производится через внешний шлюз без редиректа на страницу благодарности. Решение: реализуйте очистку корзины по вебхуку или событию, подтверждающему оплату, с обновлением сессии пользователя.
  • Использование нестандартных статусов заказа. Решение: добавьте в условие проверки статусов нужные вам статусы, например on-hold или другие.
  • Ошибка вызова WC()->cart вне сессии пользователя. Решение: убедитесь, что код выполняется в контексте сессии, например, на фронтенде.

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

  • Не очищайте корзину без проверки статуса заказа — это может привести к потерям данных пользователей.
  • Если у вас высокая нагрузка, не используйте очистку корзины через AJAX без проверки, чтобы не создавать лишних запросов.
  • Добавьте логирование в функцию очистки корзины для отладки, например, через error_log().
  • Обязательно тестируйте на staging-среде перед внедрением в продакшен.

Альтернативные методы очистки корзины

МетодПлюсыМинусыКомпромисс
Хук woocommerce_thankyouПростой и стандартный способРаботает только при переходе на страницу благодарностиИспользовать вместе с проверкой статуса заказа
Обработка вебхуков платежного шлюзаПодходит для внешних оплат без редиректаСложнее в реализации, требует синхронизации сессииИспользовать при необходимости, дополнительно к woocommerce_thankyou
Очистка корзины при входе пользователя после оплатыПодходит для долгих процессов оплатыЗадержка очистки, возможны ошибки сессииИспользовать как запасной вариант
Как запретить копирование текста в WordPress
26.01.2026
Использование внутренних категорий в WordPress для эффективной организации контента
30.03.2026
Как изменить URL для страниц автора в WordPress
10.04.2026
Как установить границы для вещественных пользователей при регистрации в WordPress
13.12.2025
Оптимизация базы данных WordPress: полезные советы и примеры кода
06.11.2025