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

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

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

Пошаговое решение

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

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

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->get_status() !== 'completed' && $order->get_status() !== 'processing') {
        return; // Очистка только для оплаченных заказов
    }
    WC()->cart->empty_cart();
}

Обратите внимание, что функция очищает корзину только если статус заказа processing или completed, то есть оплата прошла.

2. Альтернативный подход с проверкой платежного шлюза

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

add_action('woocommerce_thankyou', 'clear_cart_for_specific_gateway', 10, 1);
function clear_cart_for_specific_gateway($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    $payment_method = $order->get_payment_method();
    $allowed_gateways = array('bacs', 'cheque'); // примеры ID платежных шлюзов
    if (!in_array($payment_method, $allowed_gateways)) {
        return;
    }
    if ($order->get_status() === 'completed' || $order->get_status() === 'processing') {
        WC()->cart->empty_cart();
    }
}

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

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

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

  • Корзина не очищается: Убедитесь, что WC()->cart доступен. Если функция вызывается вне сессии пользователя (например, в бекэнде), очистка не сработает.
  • Очистка происходит слишком рано: Проверьте, что статус заказа соответствует «processing» или «completed». Некоторые платежные шлюзы меняют статус позже.
  • Пользователь видит старую корзину после очистки: Это может быть связано с кешированием страниц. Отключите кеш для страниц корзины и оформления заказа.
  • Проблемы с AJAX-корзиной: Если корзина обновляется через AJAX, убедитесь, что очищение корзины корректно обрабатывается на клиентской стороне.

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

  • Не храните логику очистки корзины в сторонних плагинах без проверки — возможны конфликты.
  • Добавляйте проверки статуса заказа и способа оплаты, чтобы избежать преждевременной очистки.
  • Исключите кеширование страниц корзины и оформления заказа, чтобы не мешать динамическому обновлению корзины.
  • Для крупных магазинов с высокой нагрузкой используйте WP Object Cache и отключайте ненужные плагины на страницах оформления заказа.

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

МетодПлюсыМинусы
Хук woocommerce_thankyouПростая реализация, срабатывает после оплатыНе работает с отложенными платежами, возможны проблемы с кешем
Очистка через CRON по статусу заказаМожно отложить очистку, обработать массовоСложнее реализовать, задержка удаления корзины
Через JavaScript на странице благодарностиОбновляет интерфейс мгновенноЗависит от клиента, может быть отключен JS
WooCommerce: как автоматически отключать неиспользуемые варианты товаров
19.07.2026
WooCommerce: как автоматически удалять товары из корзины после успешной оплаты
09.05.2026
WooCommerce: как автоматически удалять неактивных клиентов
04.08.2026
Как удалить и заблокировать IP-адреса в WordPress
11.02.2026
Как удалить пустые мета данные в WordPress для оптимизации базы данных
17.03.2026