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

Почему важно очищать корзину после успешного заказа

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

Диагностика проблемы: как понять, что корзина не очищается

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

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

1. Использование хука woocommerce_thankyou

Этот хук вызывается после успешного оформления заказа. В обработчике мы очистим корзину:

add_action('woocommerce_thankyou', 'clear_cart_after_order');
function clear_cart_after_order($order_id) {
    if (!$order_id) return;

    // Получаем объект заказа
    $order = wc_get_order($order_id);
    
    // Проверяем статус заказа
    if ($order->get_status() === 'completed' || $order->get_status() === 'processing') {
        WC()->cart->empty_cart();
    }
}

2. Почему проверяем статус заказа?

Заказы могут иметь разные статусы: pending, on-hold, processing, completed. Очищать корзину стоит только после подтверждения оплаты — обычно это processing или completed. Это предотвращает потерю данных, если оплата не прошла.

3. Альтернатива: хук woocommerce_order_status_completed

Если вы хотите точно очистить корзину только после завершения заказа, можно использовать этот хук:

add_action('woocommerce_order_status_completed', 'clear_cart_on_completed');
function clear_cart_on_completed($order_id) {
    WC()->cart->empty_cart();
}

Как проверить, что очистка корзины работает

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

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

  • Код не срабатывает: убедитесь, что код добавлен в файл functions.php дочерней темы или в плагин для пользовательских функций. Также проверьте, что WooCommerce активен.
  • Очищается корзина слишком рано: если использовать хук woocommerce_thankyou без проверки статуса заказа, корзина может очиститься до подтверждения оплаты.
  • Конфликты с другими плагинами: плагины кэширования или кастомные корзины могут влиять на работу WC()->cart->empty_cart(). Временно отключите их для теста.
  • Гостевые пользователи: если корзина сохраняется в сессии, убедитесь, что сессии корректно обрабатываются и очищаются.

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

  • Добавляйте код в дочернюю тему или в отдельный плагин, чтобы не потерять при обновлениях.
  • Избегайте очистки корзины при статусах pending или failed — это может привести к потере неоконченных заказов.
  • Если у вас много плагинов для WooCommerce, проверяйте совместимость хука woocommerce_thankyou.
  • Для сайтов с высокой нагрузкой используйте объектно-ориентированный подход и минимизируйте вызовы в хуках.

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

СпособПреимуществаНедостатки
woocommerce_thankyou с проверкой статусаГибкий, можно проверить статус заказаМожно очистить корзину слишком рано без проверки
woocommerce_order_status_completedТочно очищает после завершения заказаКорзина может оставаться заполненной до завершения
Плагины очистки корзиныУдобство, настройки без кодаДополнительная нагрузка, возможные конфликты
Как удалить избыточные виджеты в WordPress
17.04.2026
Как создать динамические таблицы в WordPress с помощью шорткода
17.12.2025
Как автоматически удалять нерабочие и устаревшие скрипты в WordPress для ускорения сайта
19.03.2026
Как создать автоматические уведомления в WordPress с помощью WPRemark
17.02.2026
Как отключить автоматические обновления в WordPress с помощью кода
04.03.2026