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

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

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

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

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

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

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

Хук 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) return;
    
    // Проверяем статус заказа
    if ($order->has_status('completed') || $order->has_status('processing')) {
        WC()->cart->empty_cart();
    }
}

Эта функция проверяет, что заказ успешно оплачен (статусы completed или processing), и очищает корзину.

Особенности работы с кэшированием

Если на сайте включено кэширование страниц (например, через плагин WP Super Cache или серверный кеш), после очистки корзины пользователь может видеть старое содержимое корзины. Чтобы избежать этого:

  • Настройте исключения для страницы корзины и страницы 'Спасибо за заказ' (thank you page) в настройках кэширования.
  • Добавьте заголовки, запрещающие кэширование для страниц с корзиной.
function disable_cache_for_cart() {
    if (is_cart() || is_checkout()) {
        nocache_headers();
    }
}
add_action('template_redirect', 'disable_cache_for_cart');

Пошаговое решение задачи

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

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

Чтобы убедиться, что корзина очищается:

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

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

  • Очистка корзины не срабатывает при некоторых способах оплаты
    Решение: убедитесь, что метод оплаты корректно переводит заказ в статус processing или completed. Для нестандартных шлюзов можно добавить дополнительные проверки или использовать хук woocommerce_payment_complete.
  • Кэширование мешает обновлению корзины
    Решение: отключите кэш на страницах корзины и оформления заказа, добавьте заголовки nocache.
  • Корзина очищается у всех пользователей, а не только оплачивающих
    Решение: функция должна вызываться именно на странице благодарности после конкретного заказа, а не глобально.

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

  • Не вызывайте очистку корзины на хуках, которые срабатывают слишком рано, чтобы не нарушать логику заказа.
  • Для сайтов с высокой нагрузкой избегайте лишних вызовов empty_cart() — проверяйте статус заказа перед очисткой.
  • Для безопасности проверяйте валидность $order_id и наличие заказа перед вызовом очистки.

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

МетодПреимуществаНедостатки
Хук woocommerce_thankyouПростая реализация, срабатывает после оплатыНе всегда срабатывает с кастомными методами оплаты
Хук woocommerce_payment_completeСрабатывает при смене статуса заказа, универсаленМожет сработать не на странице благодарности, требуется дополнительная логика
Отключение кэшированияОбеспечивает корректное отображение корзиныУвеличивает нагрузку, требует аккуратной настройки
Как использовать REST API WordPress для автоматического управления контентом
19.03.2026
Диагностика и решение проблем с неработающим AJAX в WooCommerce
03.08.2026
Как изменить размер изображений в WordPress без создания новых файлов
19.02.2026
Как создать автоматический импорт объектов из Яндекс.Карт в WordPress
09.02.2026
Как изменить URL страницы в WordPress без перенаправления
16.01.2026