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

Почему WooCommerce не очищает корзину после успешной оплаты?

По умолчанию WooCommerce очищает корзину после завершения заказа, но бывают ситуации, когда товар остается в корзине. Это может происходить из-за нестандартных настроек, конфликтов с плагинами, или если пользователь возвращается на сайт после оплаты через внешние платёжные системы без корректного завершения сессии.

Если корзина не очищается автоматически, это приводит к путанице у пользователей и может негативно повлиять на конверсию.

Диагностика проблемы с очисткой корзины WooCommerce

  • Проверьте, используется ли нестандартный шаблон оформления заказа или кастомный плагин для платежей.
  • Отключите временно все плагины, кроме WooCommerce, чтобы исключить конфликты.
  • Проверьте логи ошибок сервера и WooCommerce на предмет проблем с сессиями или куки.
  • Проверьте, не перезаписывается ли функция очистки корзины хуками в теме или плагинах.

Пошаговое решение: очистка корзины после успешной оплаты

Добавьте следующий код в файл 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 && $order->has_status('completed')) {
        WC()->cart->empty_cart();
    }
}

Объяснение:

  • Хук woocommerce_thankyou срабатывает после завершения оплаты и загрузки страницы благодарности.
  • Проверяем, что заказ существует и имеет статус completed, то есть оплачен и обработан.
  • Если условие выполняется, очищаем корзину через WC()->cart->empty_cart().

Альтернативный вариант для статуса processing

Если платежи проходят с другим статусом (например, processing), замените проверку статуса:

if ($order && $order->has_status(array('completed', 'processing'))) {
    WC()->cart->empty_cart();
}

Проверка результата

  • Создайте тестовый заказ с товарами в корзине.
  • Завершите оплату через реальный или тестовый платежный шлюз.
  • После перехода на страницу благодарности проверьте, что корзина пуста (можно посмотреть в интерфейсе сайта или вызвать WC()->cart->get_cart_contents_count() через консоль разработчика).

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

  • Корзина не очищается, потому что статус заказа не совпадает. Проверьте, какой статус получает заказ после оплаты и прописывайте его в условии.
  • Код не работает на странице благодарности. Убедитесь, что хук woocommerce_thankyou не переопределяется вашей темой или плагинами.
  • Пользователи возвращаются на сайт с кэшированной страницей. Настройте заголовки кэширования, чтобы страница благодарности не кэшировалась, иначе корзина не обновится.
  • Конфликт с плагинами кеширования. Исключите страницы оплаты и благодарности из кэширования.

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

  • Не используйте удаление корзины на основании только GET-параметров – это может привести к ошибкам или потере данных.
  • Очищайте корзину только после подтверждения успешной оплаты, чтобы избежать удаления товаров при ошибках.
  • Если используется сторонний платежный шлюз, проверяйте его документацию на события вебхуков или статусы заказа.
  • Минимизируйте количество запросов и не вызывайте очистку корзины на каждый визит — только после оплаты.

Таблица сравнения способов очистки корзины после оплаты

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка корзины сразу после загрузки страницы благодарностиПростой, работает для большинства сценариевЗависит от статуса заказа, может не сработать при кэшировании
Вебхуки платежных шлюзовОбработка события успешной оплаты с сервера платежного шлюзаНадёжно, не зависит от поведения пользователяСложнее реализовать, требует настройки API
JavaScript на странице благодарностиУдаление корзины через AJAX после загрузки страницыМожно сделать визуальный эффектЗависит от клиента, менее надёжно
Диагностика и решение проблем с неработающим AJAX в WooCommerce
07.06.2026
Как отключить автостарт WP-Cron и настроить запуск через системный cron
30.03.2026
Как создать автозаполняемую форму регистрации в WordPress с практическими решениями
12.12.2025
Автоматическое создание резервных копий WordPress: лучшие методы и примеры
02.12.2025
Как настроить отложенный запуск задач в WordPress с помощью WP-Cron
02.03.2026