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

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

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

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

WooCommerce не предоставляет встроенный механизм для очистки корзины при изменении статуса заказа на «отменён». Поэтому нужно добавить кастомный хук, который будет отслеживать изменение статуса и очищать корзину текущего пользователя.

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

  1. Откройте файл functions.php вашей дочерней темы или создайте плагин для пользовательских функций.
  2. Добавьте следующий код, который отслеживает изменение статуса заказа и очищает корзину пользователя, если заказ отменён.
add_action('woocommerce_order_status_cancelled', 'clear_cart_on_order_cancelled', 10, 1);
function clear_cart_on_order_cancelled($order_id) {
    if (!is_user_logged_in()) {
        return; // Очистка корзины актуальна только для авторизованных пользователей
    }
    $order = wc_get_order($order_id);
    $user_id = get_current_user_id();
    $cart = WC()->cart;
    if (!$cart) {
        // Инициализируем корзину, если она не загружена
        $cart = WC()->cart = new WC_Cart();
    }
    // Проверяем, что заказ принадлежит текущему пользователю
    if ($order && $order->get_user_id() === $user_id) {
        $cart->empty_cart();
    }
}

Этот код работает только для авторизованных пользователей, так как корзина по умолчанию привязана к сессии, а не к гостю. Для гостьевых заказов нужна отдельная логика с JavaScript и cookie, что выходит за рамки текущей задачи.

Как проверить, что решение сработало

  • Авторизуйтесь на сайте как пользователь.
  • Добавьте товары в корзину.
  • Создайте заказ и отмените его через админку WooCommerce.
  • Перейдите в корзину — она должна быть пустой.

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

  • Корзина не очищается для гостей: это нормальное поведение, корзина у гостей хранится в сессии браузера. Для поддержки гостей нужна дополнительная обработка на стороне фронтенда.
  • Код не срабатывает при отмене заказа админом: убедитесь, что используете правильный хук woocommerce_order_status_cancelled, а не woocommerce_order_status_changed без проверки нового статуса.
  • Вызов WC()->cart возвращает null: если код вызывается вне контекста фронтенда (например, в AJAX или CLI), корзина может не инициализироваться. В таком случае очистка невозможна.

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

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

Альтернативные варианты решения

МетодПлюсыМинусы
Код на PHP в хуке woocommerce_order_status_cancelledПростой, работает для авторизованных пользователейНе работает для гостей, требует авторизации
JavaScript очистка корзины на фронтендеПоддерживает гостейСложнее в реализации, может быть ненадёжным
Использование сторонних плагиновМинимум кода, готовые решенияМожет создать нагрузку, не всегда бесплатно
Как создать автоматический генератор заголовков на WordPress с помощью GPT
12.01.2026
Как добавить автоматическое отключение неиспользуемых плагинов в WordPress
04.04.2026
Как создать автоматический генератор временных постов в WordPress
16.03.2026
Как добавить собственный REST API endpoint в WordPress с поддержкой GPT
01.04.2026
Как создать автоматический генератор шорткодов в WordPress с поддержкой параметров
19.03.2026