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

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

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

Основные признаки проблемы:

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

Чтобы точно определить причину, нужно проанализировать логи WooCommerce, проверить работу хуков и посмотреть, нет ли конфликтов с другими плагинами.

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

Почему стандартное поведение не всегда работает

WooCommerce использует сессию и куки для хранения корзины. В некоторых случаях, например, при нестандартном способе оплаты или отмене сессии, очистка корзины не происходит.

Пошаговое решение через добавление кода в functions.php

Для гарантированной очистки корзины после успешного завершения заказа добавим следующий код:

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('processing')) {
        WC()->cart->empty_cart();
    }
}

Объяснение:

  • woocommerce_thankyou — хук, вызываемый после успешного оформления заказа.
  • Проверяем, что заказ существует и имеет статус processing (статус успешного платежа).
  • Вызываем метод empty_cart() объекта корзины, который очищает все товары.

Альтернативный вариант с проверкой статуса completed

add_action('woocommerce_order_status_completed', 'clear_cart_on_order_complete');
function clear_cart_on_order_complete($order_id) {
    if (is_admin()) {
        return;
    }
    WC()->cart->empty_cart();
}

Этот вариант срабатывает, когда заказ получает статус completed. Подходит для магазинов, которые хотят очищать корзину после полной обработки заказа.

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

Для проверки корректности работы кода:

  1. Добавьте код в файл functions.php активной темы или в кастомный плагин.
  2. Создайте тестовый заказ с помощью стандартного способа оплаты (например, «Оплата при доставке» или тестовый режим платежного шлюза).
  3. После оформления заказа проверьте корзину — она должна быть пустой.
  4. Если корзина не очищается, проверьте, не мешают ли другие плагины или кастомные скрипты.

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

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

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

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

Таблица сравнения способов очистки корзины в WooCommerce

МетодХукКогда срабатываетПлюсыМинусы
Очистка на thankyouwoocommerce_thankyouПосле оформления заказаПростая реализация, быстро срабатываетМожет не сработать, если статус заказа не processing
Очистка на completedwoocommerce_order_status_completedПри смене статуса на completedГарантированно после полной обработки заказаМожет срабатывать позже, чем нужно
JavaScript очистка корзиныКастомные скрипты на фронтендеПри загрузке страницыВозможна мгновенная очистка видимой корзиныНенадежно, зависит от браузера и кеша
Оптимизация кеширования в WordPress для ускорения сайта
24.11.2025
Как создать автоматический импорт сообщений из Telegram в WordPress
05.04.2026
Как использовать вебхуки в WordPress для автоматизации задач
02.03.2026
WordPress: как создать динамическое меню с подменю через код
08.01.2026
Как удалить или заблокировать IP-адреса в WordPress: практическое руководство
05.04.2026