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

|

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

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

Чтобы проверить, действительно ли товары не удаляются, нужно:

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

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

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 ) return;

    // Проверяем, что заказ оплачен
    if ( $order->is_paid() ) {
        WC()->cart->empty_cart();
    }
}

Объяснение:

Обработка сценариев с кэшированием

Если сайт использует кэширование страниц (например, плагин WP Rocket, Varnish, CDN), очистка корзины на стороне сервера может не сразу отразиться в браузере. В таких случаях добавим JavaScript для принудительного обновления корзины на странице «Спасибо за заказ».

add_action('woocommerce_thankyou', 'custom_clear_cart_js', 20);
function custom_clear_cart_js() {
    if ( is_order_received_page() ) {
        ?>
        <script>
        document.addEventListener('DOMContentLoaded', function() {
            fetch('<?php echo esc_url( wc_get_cart_url() ); ?>', {credentials: 'same-origin'})
                .then(response => response.text())
                .then(() => {
                    fetch('<?php echo esc_url( wc_get_cart_url() ); ?>?wc-ajax=get_refreshed_fragments', {
                        credentials: 'same-origin'
                    }).then(() => {
                        // Вставьте здесь дополнительный код обновления UI при необходимости
                    });
                });
        });
        </script>
        <?php
    }
}

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

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

  1. Очистите кеш сайта и браузера.
  2. Авторизуйтесь или используйте инкогнито.
  3. Добавьте товар в корзину и оформите заказ, оплатите его.
  4. После редиректа на страницу «Спасибо за заказ» обновите страницу корзины вручную или перейдите на нее.
  5. Корзина должна быть пустой.

Если корзина по-прежнему содержит товары, проверьте консоль браузера на ошибки JavaScript и отключите все сторонние кэш-плагины для теста.

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

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

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

МетодПлюсыМинусы
PHP: хук woocommerce_thankyou + empty_cart()Просто и надежно, очищает корзину на сервереМожет не обновиться в браузере из-за кэша
JavaScript: обновление корзины на странице «Спасибо за заказ»Обновляет UI, обходя проблемы кэшаЗависит от загрузки JS, возможны ошибки браузера
Использование плагинов кеша с динамическими фрагментами WooCommerceОптимизировано для WooCommerce, поддерживает обновления корзиныСложнее в настройке, требует дополнительных плагинов
Как избежать проблем с перенаправлением после смены домена WordPress
17.01.2026
Как удалить или скрыть авторизацию для определённых пользователей в WordPress
26.03.2026
WooCommerce: как автоматически возвращать товар в склад после отмены заказа
24.04.2026
Как удалить пустые термины в WordPress через код и плагины
05.04.2026
WooCommerce: как автоматически удалять отзывы о товарах через заданный период
30.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше