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

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

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

Кроме того, бывает необходимо автоматически удалять из корзины товары с определёнными атрибутами (например, по цвету, размеру или категории), чтобы исключить несовместимые или запрещённые комбинации.

Как проверить, что автоматическое сохранение корзины включено

По умолчанию WooCommerce сохраняет корзину через сессии и куки. Для проверки:

  • Откройте консоль браузера, перейдите на страницу магазина.
  • Добавьте товар в корзину.
  • Обновите страницу или зайдите на другой — корзина должна остаться сохранённой.

Если корзина очищается после обновления — автоматическое сохранение отключено либо конфликтует с плагинами кэширования.

Пошаговое отключение автоматического сохранения корзины

WooCommerce не предоставляет прямого фильтра для отключения сохранения корзины, но можно очистить сессию пользователя при загрузке страницы, что эффективно "сбрасывает" корзину.

add_action('init', function() {
    if ( is_user_logged_in() && !is_admin() ) {
        WC()->session->destroy_session();
        WC()->cart->empty_cart();
    }
});

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

Альтернативный вариант: отключение сохранения корзины только на определённых страницах

add_action('template_redirect', function() {
    if ( is_cart() || is_checkout() ) {
        WC()->session->destroy_session();
        WC()->cart->empty_cart();
    }
});

Это позволит сохранять корзину на страницах магазина, но очищать её перед оформлением заказа.

Автоматическое удаление товаров из корзины по атрибутам

Чтобы автоматически удалять товары, например, с атрибутом "цвет: красный", можно использовать следующий код в functions.php темы или в кастомном плагине:

add_action('woocommerce_before_cart', function() {
    $cart = WC()->cart->get_cart();
    foreach ($cart as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $attributes = $product->get_attributes();

        // Пример: удалить товары с атрибутом pa_color = red
        if (isset($attributes['pa_color'])) {
            $terms = wc_get_product_terms($product->get_id(), 'pa_color', array('fields' => 'slugs'));
            if (in_array('red', $terms, true)) {
                WC()->cart->remove_cart_item($cart_item_key);
            }
        }
    }
});

Здесь мы проверяем атрибуты каждого товара в корзине и удаляем по условию. Можно аналогично проверять другие атрибуты или кастомные метаданные.

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

  • Очистите кеш браузера и, если используете, кеш плагинов.
  • Добавьте в корзину товар с нужным атрибутом (например, цвет "red").
  • Перейдите на страницу корзины — товар должен исчезнуть.
  • Добавьте товар с другим атрибутом — он останется.
  • Для отключения сохранения корзины — проверьте, что после обновления страницы корзина очищается.

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

  • WC()->cart возвращает null — убедитесь, что вызов происходит после инициализации WooCommerce, лучше использовать хук woocommerce_before_cart или позднее.
  • Атрибуты не удаляются — проверьте, что атрибуты объявлены как таксономии (например, pa_color), а не просто свойства. Для кастомных атрибутов используйте другой способ проверки.
  • Конфликты с кэшированием — если корзина ведёт себя некорректно, отключите кэширование страниц для корзины и оформления заказа.
  • Код очищает корзину слишком часто — уточните условия в коде, чтобы не удалять товары без необходимости.

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

  • Не используйте очистку сессии на каждом запросе, это увеличит нагрузку и ухудшит UX. Лучше ограничить очистку определёнными страницами или событиями.
  • Всегда тестируйте код в staging-среде, особенно если модифицируете корзину, чтобы не нарушить процесс оформления заказа.
  • Для крупных магазинов с большим количеством атрибутов оптимизируйте проверку атрибутов, кэшируйте результаты, чтобы уменьшить количество запросов к базе.
  • Если используете сторонние плагины управления атрибутами, убедитесь, что ваш код совместим с их API.

Сравнение способов управления корзиной в WooCommerce

МетодОписаниеПреимуществаНедостатки
Отключение сессии WC()->session->destroy_session()Полная очистка корзины и сессии пользователяПростота реализации, полный сбросПлохой UX, сброс корзины у всех пользователей
Удаление товаров по атрибутам в хукеУдаляет специфичные товары из корзиныГибко, выборочно, не трогает остальные товарыНужно точно знать атрибуты, возможны конфликты
Использование плагинов для управления корзинойРасширенные настройки, интерфейсУдобство, поддержка, часто больше функцийЗависимость от плагина, возможное замедление
WooCommerce: автоматическое удаление неактивных товаров по дате и статусу
01.05.2026
Как добавить автоматическое удаление неликвидных постов в WordPress
01.02.2026
Как изменить регистрацию пользователей в WordPress без плагинов
20.02.2026
Как использовать хук filter pre_get_posts для автоматической фильтрации записей в WordPress
02.03.2026
Как добавить многоязычность в WordPress без плагинов
18.11.2025

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.