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

Диагностика проблемы с «зависшими» товарами в корзине WooCommerce

В WooCommerce по умолчанию корзина сохраняется в сессии пользователя и в cookie, поэтому товары могут оставаться в ней даже после оплаты или длительного бездействия. Это приводит к тому, что пользователи видят в корзине старые товары, что может сбивать с толку и ухудшать UX.

Проверить наличие «зависших» товаров можно так:

  • Откройте сайт в режиме инкогнито, добавьте товар в корзину, оплатите заказ;
  • Вернитесь на сайт, откройте корзину — если товары остались, значит корзина не очищается автоматически.

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

  • Стандартный функционал WooCommerce не сбрасывает корзину после успешной оплаты;
  • Плагины кэширования или оптимизации могут сохранять старые данные корзины;
  • Кастомные модификации или темы могут влиять на обработку сессии.

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

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

add_action( 'woocommerce_thankyou', 'clear_cart_after_payment' );
function clear_cart_after_payment( $order_id ) {
    if ( ! $order_id ) return;
    $order = wc_get_order( $order_id );
    if ( ! $order ) return;

    // Проверяем статус заказа
    $status = $order->get_status();
    if ( in_array( $status, array( 'completed', 'processing' ) ) ) {
        WC()->cart->empty_cart();
    }
}

Этот хук срабатывает на странице благодарности, когда пользователь возвращается после оплаты. Если заказ в статусе completed или processing, корзина очищается.

Альтернативный вариант: очищать корзину сразу после смены статуса заказа

add_action( 'woocommerce_order_status_completed', 'clear_cart_on_order_completed' );
add_action( 'woocommerce_order_status_processing', 'clear_cart_on_order_completed' );
function clear_cart_on_order_completed( $order_id ) {
    if ( ! is_user_logged_in() ) return;
    // Очистка корзины пользователя, сделавшего заказ
    WC()->cart->empty_cart();
}

Однако этот способ работает только если заказ создаёт залогиненный пользователь, и корзина активна в его сессии.

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

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

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

  • Ничего не происходит после оплаты — убедитесь, что код добавлен в правильное место, и что хук woocommerce_thankyou срабатывает. Возможен конфликт с кэшированием.
  • Корзина не очищается для гостей — корзина у гостя хранится в cookie, очистить её программно сложно, лучше использовать JS для очистки cookie после успешного заказа.
  • Очистка корзины происходит слишком рано — используйте статусы заказа completed или processing, чтобы избежать удаления товара до оплаты.

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

  • Не храните важные данные корзины в cookie без шифрования.
  • Избегайте очистки корзины на фронтенде через JS без проверки статуса заказа.
  • Проверьте совместимость с плагинами кэширования (например, WP Super Cache, W3 Total Cache) — они могут кешировать страницы с корзиной.

Чек-лист внедрения автоматической очистки корзины после оплаты

  1. Добавить код очистки корзины на хук woocommerce_thankyou в functions.php;
  2. Проверить, что в вашей теме или плагинах нет конфликтов с сессиями и кэшированием;
  3. Протестировать очистку корзины для авторизованных пользователей;
  4. Добавить JS-скрипт для очистки cookie корзины у гостей (если требуется);
  5. Мониторить логи ошибок и поведение на продакшене.

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

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка корзины на странице благодарностиПростой, срабатывает после оплатыНе работает, если пользователь не возвращается на сайт
Хуки статуса заказа processing/completedОчистка корзины при смене статуса заказаСрабатывает независимо от возврата пользователяРаботает только для залогиненных пользователей
JS очистка cookie корзиныУдаление данных корзины у гостей через JavaScriptРаботает для гостейМенее надежно, зависит от браузера
WooCommerce: как исправить невозможность отмены заказа после оплаты
15.06.2026
Отключение автоматического возврата средств в WooCommerce и настройка возврата с подтверждением
30.06.2026
Как использовать фильтры и хуки WooCommerce для изменения цены товара в корзине
03.05.2026
Проблемы с пересчётом стоимости в WooCommerce при изменении количества товаров и их решение
19.05.2026
WooCommerce: как отключить автоматические попытки платежей при неудачном заказе
12.06.2026