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

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

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

Основные причины проблемы:

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

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

1. Проверка стандартного поведения WooCommerce

По умолчанию WooCommerce очищает корзину при успешном создании заказа, но при нестандартных сценариях (например, сторонние платежные шлюзы) это может не сработать.

2. Добавляем хук для очистки корзины после оплаты

Для гарантированной очистки корзины после успешного завершения заказа используйте хук 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->get_status() === 'completed' || $order->get_status() === 'processing') {
        WC()->cart->empty_cart();
    }
}

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

3. Отключаем кэширование страниц корзины и оформления заказа

Если на сайте включено кэширование (например, через плагин WP Rocket, LiteSpeed Cache или серверное кэширование), необходимо исключить из кэширования страницы корзины и оформления заказа:

  • /cart/
  • /checkout/

Иначе пользователь будет видеть устаревшую корзину.

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

  1. Добавьте товар в корзину на сайте в режиме инкогнито.
  2. Перейдите к оформлению заказа и оплатите тестовым способом.
  3. После перенаправления на страницу благодарности обновите страницу корзины — она должна быть пустой.
  4. Также проверьте, что при переходе на корзину без оформления заказа товары остаются в корзине.

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

  • Корзина не очищается после оплаты: возможно, статус заказа не меняется на processing или completed, а остаётся on-hold. Проверьте статус в админке WooCommerce и добавьте нужные статусы в условие.
  • Проблемы с кэшированием: страницы корзины и оформления закэшированы — исключите их из кэширования.
  • Пользователь не переходит на страницу благодарности: если платежный шлюз не перенаправляет на стандартную страницу, очистка корзины не сработает. В этом случае нужен дополнительный код, основанный на вебхуках шлюза.

Практические советы по оптимизации и безопасности

  • Не используйте WC()->cart->empty_cart() на страницах, где пользователь ещё не закончил покупку.
  • Для повышения производительности отключайте кэширование только для нужных URL, чтобы не снизить общую скорость сайта.
  • Если используете сторонние платежные шлюзы, изучите их документацию на предмет событий успешной оплаты, чтобы вызывать очистку корзины корректно.

Сравнение вариантов решения

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка корзины на странице благодарностиПростой, стандартный способ, работает с большинством шлюзовНе сработает, если нет перехода на страницу благодарности
Обработка вебхуков платежного шлюзаОчистка корзины при получении сигнала об оплатеРаботает без зависимости от редиректов, надежнее для нестандартных шлюзовСложнее в реализации, требует изучения API шлюза
Отключение кэширования страниц корзины и оформленияОбеспечивает актуальность данных корзиныИзбегает проблем с отображением устаревшей корзиныМожет уменьшить скорость загрузки этих страниц
Как добавить капчу в формы регистрации WordPress
16.03.2026
WooCommerce: как автоматически удалять товар из заказа после оплаты
03.06.2026
Как сделать двойную авторизацию в WordPress без плагинов
18.02.2026
Как удалить или отключить плагин WordPress: практическое руководство
09.04.2026
WooCommerce: как отключить автоизменение цены при выборе варианта товара
03.05.2026