Автоматическое удаление товара из корзины 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Срабатывает при смене статуса заказа, универсаленМожет сработать не на странице благодарности, требуется дополнительная логика
Отключение кэшированияОбеспечивает корректное отображение корзиныУвеличивает нагрузку, требует аккуратной настройки
Как создать автозаполняемую форму регистрации в WordPress с практическими решениями
12.12.2025
Как удалить старые медиа файлы в WordPress автоматически
16.03.2026
Диагностика и решение проблем с неработающим AJAX в WooCommerce
12.07.2026
Диагностика и решение проблем с неработающим AJAX в WooCommerce
05.07.2026
Автоматическое отключение неиспользуемых плагинов WordPress
20.01.2026