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

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

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

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

  • Используется ли кастомный шлюз оплаты, который не вызывает стандартное действие woocommerce_checkout_order_processed или woocommerce_payment_complete.
  • Есть ли сторонние плагины, которые могут менять поведение корзины, например, плагины для подписок или отложенных покупок.
  • Проверить логи ошибок PHP и WooCommerce на предмет сбоев в обработке заказа.
  • Проверьте, очищается ли корзина при оформлении заказа в стандартном режиме (без плагинов сторонних платежей).

Пошаговое решение: программное удаление товаров из корзины после успешной оплаты

Для гарантированного удаления товаров из корзины после успешной оплаты добавим хук на действие woocommerce_payment_complete, которое вызывается после подтверждения оплаты заказа.

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

add_action('woocommerce_payment_complete', 'wpfix_clear_cart_after_payment');
function wpfix_clear_cart_after_payment($order_id) {
    if (!WC()->cart) {
        return; // корзина не инициализирована
    }
    WC()->cart->empty_cart();
}

Этот код проверит, инициализирована ли корзина, и очистит ее при подтверждении оплаты.

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

Если вышеуказанный хук не срабатывает из-за особенностей платежного шлюза, можно использовать хук woocommerce_thankyou, который срабатывает после оформления заказа и перенаправления на страницу благодарности:

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

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

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

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

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

  • Код не срабатывает из-за отсутствия инициализации корзины: убедитесь, что код вызывается на фронтенде, где есть объект WC()->cart. В административной части корзина не доступна.
  • Платежный шлюз не вызывает стандартные хуки WooCommerce: в этом случае используйте хук woocommerce_thankyou или обрабатывайте событие через API платежного шлюза, чтобы вручную вызвать очистку корзины.
  • Кэширование страниц мешает обновлению корзины: отключите кэширование страниц корзины и страницы оформления заказа, либо настройте исключения для этих страниц.
  • Очистка корзины вызывает ошибки на сайтах с мультивитринной архитектурой: проверьте, что вызов WC()->cart->empty_cart() выполняется в контексте правильного сайта.

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

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

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

МетодКодПлюсыМинусы
woocommerce_payment_complete
add_action('woocommerce_payment_complete', 'clear_cart');
Срабатывает при подтверждении оплаты, точный моментНе всегда вызывается нестандартными шлюзами
woocommerce_thankyou
add_action('woocommerce_thankyou', 'clear_cart');
Срабатывает на странице благодарности, универсальноЗависит от успешного перенаправления клиента
Кастомный вызов через API платежного шлюзаЗависит от интеграцииГарантированное срабатываниеТребует дополнительной разработки
Как установить ограничение на размер и тип файлов при загрузке в WordPress
13.01.2026
Как использовать WPCommunity для создания команды разработчиков на WordPress
12.03.2026
Как установить ограничения на число постов в рубриках WordPress
26.01.2026
Как использовать WPCommunity для создания внутреннего портала на WordPress
07.02.2026
Как установить ограничение на количество одновременных подключений к базе данных в WordPress
14.02.2026