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

Проблема: корзина не очищается после оформления заказа

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

Почему это важно?

Если корзина не очищается, пользователь может случайно оформить заказ с теми же товарами повторно, что негативно влияет на UX и может привести к конфликтам в учёте заказов.

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

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

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

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

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();
    }
}

Если необходимо очищать корзину сразу после любого успешного заказа (статусы completed, processing и т.д.), можно расширить проверку:

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

    $order = wc_get_order($order_id);
    if ($order && in_array($order->get_status(), array('processing', 'completed'))) {
        WC()->cart->empty_cart();
    }
}

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

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

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

  • Код не срабатывает: Проверьте, что хуки добавлены в functions.php активной темы или в кастомный плагин, и что нет конфликтов с другими плагинами, которые могут блокировать WC()->cart->empty_cart().
  • Корзина очищается слишком рано: Не используйте хуки, срабатывающие до того, как заказ подтверждён, чтобы не стирать корзину преждевременно.
  • Проблемы с сессиями: Убедитесь, что на сайте корректно работают cookie и сессии, иначе WooCommerce не сможет корректно идентифицировать корзину пользователя.
  • Кэширование страниц: При использовании плагинов кэширования (например, WP Rocket, LiteSpeed) отключите кэширование страниц WooCommerce, чтобы обновления корзины отображались сразу.

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

  • Добавляйте кастомный код в дочернюю тему или отдельный плагин, чтобы изменения не потерялись при обновлении.
  • Тестируйте на staging-сервере перед внедрением на живом сайте.
  • Следите за совместимостью с другими плагинами, особенно с плагинами оплаты и кэширования.
  • Если используется REST API для оформления заказов, убедитесь, что очистка корзины вызывается на соответствующих этапах.

Сравнение решений: плагин vs кастомный код

МетодПреимуществаНедостатки
Плагин очистки корзиныПростая установка, настройки через интерфейс, поддержка обновленийМожет влиять на производительность, не всегда гибко под кастомные кейсы
Кастомный код (хуки)Гибкость, контроль над логикой, минимальное влияние на производительностьТребует навыков программирования, необходимо поддерживать самостоятельно
Как использовать REST API для автоматизации WordPress
03.03.2026
WooCommerce: как реализовать отложенные платежи без плагинов
04.05.2026
Создаем динамический виджет в WordPress: пошаговое руководство с примерами кода
22.11.2025
Как автоматически изменять изображения при загрузке в WordPress
04.04.2026
Оптимизация загрузки CSS в WordPress: ускоряем работу сайта
18.11.2025