Автоматическое удаление товара из корзины 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 после загрузки страницыМожно сделать визуальный эффектЗависит от клиента, менее надёжно
Как безопасно удалить неиспользуемые таблицы из базы данных WordPress
15.12.2025
Как удалить проблемы с оставшимися transient-параметрами в WordPress
16.02.2026
Автоматическое отключение неиспользуемых плагинов WordPress
20.01.2026
Как создать динамическое меню в WordPress с применением хуков
12.03.2026
Как отключить AJAX обновление корзины WooCommerce без потери функциональности
19.05.2026