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

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

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

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

  • Конфликты с плагинами, которые вмешиваются в процесс оформления заказа.
  • Кэширование страниц корзины или пользовательских сессий.
  • Кастомный код или тема, которые изменяют стандартное поведение WooCommerce.
  • Использование AJAX-запросов без правильной очистки сессионных данных.

Как проверить, очищается ли корзина после заказа

  1. Оформите тестовый заказ на сайте.
  2. После успешного оформления перейдите на страницу корзины или попробуйте добавить новый товар.
  3. Если корзина содержит старые товары, значит очистка не сработала.
  4. Проверьте логи ошибок PHP и консоль браузера на наличие конфликтов JavaScript или ошибок AJAX.

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

Для гарантированной очистки корзины после оформления заказа добавим хук на действие woocommerce_thankyou, который срабатывает после успешного оформления заказа на странице благодарности.

Добавьте следующий код в файл functions.php вашей дочерней темы или в плагин для пользовательских функций:

add_action('woocommerce_thankyou', 'wpdream_clear_cart_after_order');
function wpdream_clear_cart_after_order( $order_id ) {
    if ( ! $order_id ) {
        return;
    }
    // Получаем объект заказа
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return;
    }
    // Очищаем корзину
    WC()->cart->empty_cart();
}

Этот код проверяет наличие ID заказа, получает объект заказа и затем очищает корзину текущего пользователя.

Устранение влияния кэша

Если сайт использует кэширование (например, через плагин WP Super Cache, W3 Total Cache или серверное кэширование), убедитесь, что страницы оформления заказа и корзины не кэшируются. Добавьте исключения в настройки кэширования или используйте следующий в .htaccess для исключения страниц WooCommerce:

# Исключить страницы WooCommerce из кэширования
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} ^/cart$ [OR]
RewriteCond %{REQUEST_URI} ^/checkout$
RewriteRule .* - [E=Cache-Control:no-cache]
</IfModule>

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

Для проверки:

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

Если корзина всё ещё не очищается, проверьте консоль браузера и логи ошибок, а также отключите сторонние плагины для поиска конфликтов.

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

  • Кэширование страниц корзины или оформления заказа: приводит к отображению старого состояния корзины — решается отключением кэша для этих страниц.
  • Конфликты с плагинами: некоторые плагины, например, для кэширования или оптимизации, могут блокировать очистку корзины — отключайте плагины по очереди при диагностике.
  • Использование AJAX без очистки сессии: если кастомные скрипты влияют на корзину, убедитесь, что вызывается WC()->cart->empty_cart() после оформления.
  • Код добавлен в неподходящее место: функции лучше размещать в дочерней теме или отдельном плагине, чтобы избежать перезаписи при обновлении.

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

  • Не используйте хук init для очистки корзины — это может привести к непреднамеренному удалению товаров.
  • Всегда проверяйте, что ID заказа валиден перед очисткой корзины, чтобы избежать ошибок.
  • Исключайте страницы WooCommerce из кэширования на уровне сервера и плагинов.
  • Отслеживайте состояние корзины через сессии PHP — если используется Redis или Memcached, убедитесь, что сессии правильно сбрасываются.

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

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка после успешного оформления заказа через стандартный хукПростой, надёжный, работает с большинством тем и плагиновНе работает, если оформление заказа кастомизировано сильно
Отключение кэша страниц корзины и оформления заказаИсключение страниц из кэширования на уровне сервера или плагинаОбеспечивает актуальность корзины для всех пользователейУвеличивает нагрузку на сервер, требует настройки
Кастомный AJAX-скриптОчистка корзины через AJAX после оформления заказаГибкость, подходит для SPA и кастомных решенийСложнее в реализации, требует проверки безопасности
Как использовать REST API WordPress для создания собственных приложений
15.12.2025
Как использовать хуки WooCommerce для добавления функционала в WordPress
03.12.2025
Как удалить пустые атрибуты и классы из HTML в WordPress
31.05.2026
Как добавить динамические поля в WordPress без плагинов
14.03.2026
Как автоматически отслеживать изменения в WooCommerce и отправлять уведомления
20.06.2026