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

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

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

Как работает стандартное поведение WooCommerce с корзиной

После оформления заказа WooCommerce не очищает корзину автоматически, а только помечает заказ как завершённый. Пользователь может вернуться и увидеть товары в корзине, что негативно влияет на UX.

Причины проблемы:

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

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

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

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

add_action('woocommerce_thankyou', 'clear_cart_after_purchase');
function clear_cart_after_purchase($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

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

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

Особенности и улучшения

  • Для цифровых товаров можно дополнительно проверить, что в заказе нет физических товаров, если очистка нужна только для определённых типов продуктов.
  • Если используется кэширование, стоит убедиться, что корзина обновляется корректно.

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

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

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

  • Корзина не очищается: возможно, код вставлен не в то место или кэш блокирует обновление. Проверьте, активирован ли WP Super Cache, LiteSpeed Cache или подобные плагины, и отключите кэширование страниц корзины.
  • Функция WC()->cart->empty_cart() не работает: убедитесь, что сессия WooCommerce доступна, и хук вызывается после инициализации корзины.
  • Корзина очищается слишком рано: используйте хук woocommerce_thankyou, а не woocommerce_checkout_order_processed, чтобы не потерять данные заказа.

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

  • Не используйте слишком ранние хуки для очистки корзины — это может привести к потере данных заказа.
  • Тестируйте функции очистки корзины в разных браузерах и с разными пользовательскими ролями.
  • Если сайт использует CDN или кэширование на уровне сервера, убедитесь, что страницы корзины и оформления заказа не кэшируются.

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

МетодПлюсыМинусыКогда использовать
Хук woocommerce_thankyou + empty_cart()Простое и надёжное решение, работает сразу после оплатыНе сработает, если заказ не завершён корректноСтандартные сайты WooCommerce с обычными товарами
Хук woocommerce_checkout_order_processedПозволяет работать с заказом сразу после оформленияКорзина может очищаться слишком раноЕсли нужна логика до редиректа на страницу благодарности
Использование JavaScript для очистки корзины на клиентеМожно быстро очистить корзину после загрузки страницыМенее надёжно, зависит от браузера и скриптовДополнительный UX-эффект, но не основное решение
Как добавить автозаполнение форм в Elementor для WordPress
20.01.2026
WooCommerce: автоматическое изменение стоимости товаров по акциям с поддержкой Elementor
25.06.2026
Как создать автоматические блоки контента в Elementor через WPRemark
22.02.2026
WooCommerce: решение проблем с отображением стоимости вариативных товаров в Elementor
02.07.2026
Как добавить автоматический прелоадер в Elementor для WordPress
16.04.2026