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

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

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

  • Кэширование страниц, из-за которого корзина не обновляется корректно.
  • Сторонние плагины, которые вмешиваются в процесс очистки корзины.
  • Некорректная работа хуков или кастомных функций, которые управляют корзиной.
  • Заказы, созданные вне стандартного процесса WooCommerce (например, через REST API), без правильного триггера очистки корзины.

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

1. Проверка стандартного поведения WooCommerce

Убедитесь, что в вашей теме и плагинах нет переопределений, которые мешают стандартной очистке корзины. Для этого временно отключите все плагины, кроме WooCommerce, и переключитесь на дефолтную тему (например, Storefront).

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

Хук woocommerce_thankyou вызывается после успешной оплаты. Добавим функцию, которая очистит корзину пользователя после завершения заказа:

add_action('woocommerce_thankyou', 'clear_cart_after_payment');
function 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.

3. Решение для кэшированных страниц и гостевых пользователей

Если сайт использует кэширование (например, через плагин WP Rocket, LiteSpeed Cache или серверное кэширование), убедитесь, что страницы корзины и оформления заказа исключены из кэша. Иначе корзина не обновится сразу после оплаты.

Для гостевых пользователей (неавторизованных) WooCommerce хранит корзину в сессии и cookie. Иногда cookie не обновляются корректно. Можно добавить JavaScript для принудительного обновления корзины после оплаты, но это крайний случай.

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

  1. Создайте тестовый заказ на сайте под авторизованным пользователем.
  2. После успешной оплаты перейдите на страницу корзины и убедитесь, что она пуста.
  3. Повторите тест под гостевым пользователем (в другом браузере или режиме инкогнито).
  4. Проверьте работу при включённом кэшировании страниц.

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

  • Код не срабатывает для гостевых пользователей: WC()->cart зависит от сессии, которая может не обновляться при кэшировании. Решение — исключить страницы корзины и оформления из кэша.
  • Плагин безопасности блокирует очистку корзины: проверьте логи и временно отключите плагины безопасности для теста.
  • Использование нестандартных статусов заказа: добавьте их в проверку if ($order->has_status(...)).
  • Ошибка типа «Call to a member function empty_cart() on null»: убедитесь, что вызов происходит в нужном контексте, где доступен объект корзины WooCommerce.

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

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

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

МетодПлюсыМинусыРекомендуется для
Стандартное поведение WooCommerceРаботает из коробки, не требует кодаМожет ломаться из-за кэша или плагиновПростые сайты без агрессивного кэширования
Код на хуке woocommerce_thankyouГарантированное очищение корзины после оплатыТребует точной настройки и проверкиСайты с нестандартными статусами, кастомным процессом оплаты
JavaScript-очистка корзиныРаботает для гостевых пользователей при проблемах с сессиямиУсложняет код, возможны баги из-за асинхронностиСложные случаи с кэшированием и гостевыми пользователями
Как изменить URL адреса страниц в WordPress
10.11.2025
Как создать автоматический импорт продуктов в WooCommerce из Google Sheets
12.04.2026
Как создать уникальный отзывный блок в WordPress с помощью плагинов и кода
09.04.2026
Как добавить уникальные поля для пользователей в WordPress
12.03.2026
Как сделать вывод главных категорий в WordPress с помощью кода
06.04.2026