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

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

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

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

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

Такой сбой чаще всего вызван отсутствием вызова метода очистки корзины WC()->cart->empty_cart() после подтверждения оплаты.

Пошаговое решение: как вручную очищать корзину после успешного заказа

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

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

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

Этот код проверяет, что заказ существует и находится в статусе processing или completed, после чего очищает корзину.

2. Очистка корзины для кастомных платежных шлюзов

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

add_action('woocommerce_order_status_changed', 'clear_cart_on_order_status_change', 10, 3);
function clear_cart_on_order_status_change($order_id, $old_status, $new_status) {
    if (in_array($new_status, array('processing', 'completed'))) {
        WC()->cart->empty_cart();
    }
}

Как проверить, что корзина очищается после оплаты

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

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

  • Корзина не очищается при использовании кастомного шлюза: Проверьте, меняется ли статус заказа на processing или completed. Добавьте кастомный обработчик для своего статуса.
  • Ошибка «Call to a member function empty_cart() on null»: Убедитесь, что вызов WC()->cart происходит в контексте сессии пользователя (например, на фронтенде), а не в админке.
  • Корзина очищается слишком рано: Используйте хуки срабатывающие после подтверждения оплаты, не раньше.

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

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

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

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка корзины после успешного заказа на странице благодарностиПростой, срабатывает после оплатыНе работает при нестандартных платежах с задержкой обработки
Хук woocommerce_order_status_changedОчистка при смене статуса заказа на processing/completedУниверсальный для всех способов оплатыТребует правильной настройки статусов в платежных шлюзах
Очистка на стороне клиента через JSУдаление корзины через скрипты после редиректаРаботает при любых условияхМенее надежно, зависит от браузера и может быть заблокировано
Как создать собственный шорткод в WordPress
08.11.2025
WooCommerce: как исключить определённые товары из применения скидок
07.05.2026
Как удалить неиспользуемые метаданные в WordPress: практические решения и примеры
11.04.2026
Как создать нетипичный файловый хендлер в WordPress для обработки нестандартных типов файлов
24.03.2026
Автоматизированный импорт продуктов в WordPress: практическое руководство с WPBono
16.03.2026