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
Как удалить ревизии постов в WordPress для очистки базы данных
11.12.2025
Как удалить и заблокировать IP-адреса в WordPress
11.02.2026
Как автоматически удалять старые изображения в WordPress
22.02.2026
Автоматический импорт данных из Excel в WordPress
06.12.2025
Как удалить или заблокировать IP-адреса в WordPress: практическое руководство
05.04.2026