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

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

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

Чтобы диагностировать проблему, проверьте:

  • Работают ли стандартные хуки WooCommerce, связанные с завершением заказа (woocommerce_thankyou, woocommerce_order_status_completed).
  • Есть ли активные плагины кеширования, которые могут сохранять старую версию страницы с корзиной.
  • Не вмешиваются ли сторонние плагины в механизм очистки корзины.

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

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

Добавьте в файл functions.php вашей темы или в кастомный плагин следующий код, который удалит все товары из корзины сразу после успешного оформления заказа:

add_action('woocommerce_thankyou', 'wplock_clear_cart_after_payment', 10, 1);
function wplock_clear_cart_after_payment($order_id) {
    if (!$order_id) {
        return;
    }
    $order = wc_get_order($order_id);
    if ($order && $order->has_status('completed')) {
        WC()->cart->empty_cart();
    }
}

Обратите внимание, что в данном примере корзина очищается только после смены статуса заказа на completed. Если вы хотите очистить корзину сразу после оплаты, можно убрать проверку статуса:

add_action('woocommerce_thankyou', 'wplock_clear_cart_after_payment_immediate', 10, 1);
function wplock_clear_cart_after_payment_immediate($order_id) {
    if (!$order_id) {
        return;
    }
    WC()->cart->empty_cart();
}

2. Очистка корзины при смене статуса заказа

Иногда логичнее очищать корзину при смене статуса заказа на «завершен» или «обработан». Для этого используйте следующий код:

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

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

Чтобы убедиться, что корзина очищается корректно, выполните тестовое оформление заказа с тестовым платежом (например, используя режим Sandbox платежного шлюза). После успешной оплаты:

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

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

  • Корзина не очищается, несмотря на код: возможно, корзина кешируется сторонним плагином (например, WP Rocket, LiteSpeed Cache). Отключите кеширование для страниц корзины и оформления заказа.
  • Очистка корзины происходит слишком рано: если корзина очищается сразу после нажатия кнопки «Оплатить», а не после успешной оплаты, используйте хук woocommerce_order_status_completed вместо woocommerce_thankyou.
  • Вызов WC()->cart->empty_cart() в бекенде не работает: убедитесь, что функция вызывается в контексте сессии пользователя, иначе очистка корзины не повлияет на сессию клиента.
  • Конфликты с другими плагинами: попробуйте отключить все плагины, кроме WooCommerce, и проверить работу скрипта. Если проблема решится, включайте плагины по одному для поиска виновника.

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

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

Сравнение вариантов решения очистки корзины

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyou с удалением сразуОчищает корзину сразу после оформления заказаПростая реализация, быстроМожет очистить корзину до оплаты, если процесс прерван
Хук woocommerce_order_status_completedОчищает корзину после смены статуса на "завершен"Безопасно, гарантирует успешную оплатуКорзина может оставаться заполненной дольше
Отключение кеширования страниц корзиныИзбегает возвращения старого содержимого корзиныУстраняет проблему кешаУвеличивает нагрузку на сервер
Как автоматизировать удаление старого контента в WordPress
31.03.2026
Как отключить XML-RPC в WordPress без поломки авторизации и интеграций
10.08.2026
WooCommerce: как автоматически изменять атрибуты товара при выборе варианта
29.04.2026
WooCommerce: как автоматически удалять товар из корзины после оплаты
04.08.2026
WooCommerce: отключение автоматического изменения атрибутов при выборе варианта товара
07.05.2026