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

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

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

Стандартный функционал WooCommerce не позволяет гибко фильтровать корзину по атрибутам без доработок. Поэтому без кодового решения или плагина такие задачи остаются нерешёнными.

Пошаговое решение: фильтрация товаров в корзине по атрибутам

1. Определение условия исключения товаров

Для начала нужно чётко определить, по каким атрибутам товары нужно исключать. Например, исключать все товары с атрибутом color=red.

2. Добавление кода в файл functions.php или в плагин для сайта

Ниже пример кода, который при добавлении на сайт исключит из корзины все товары с атрибутом pa_color равным red. Код срабатывает при обновлении корзины и удаляет такие позиции.

add_action('woocommerce_before_calculate_totals', 'exclude_products_by_attribute_from_cart', 10, 1); 
function exclude_products_by_attribute_from_cart( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

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

        if ( isset($attributes['pa_color']) ) {
            $colors = $product->get_attribute('pa_color');
            // Проверяем, есть ли красный цвет среди атрибутов
            if ( strpos(strtolower($colors), 'red') !== false ) {
                $cart->remove_cart_item( $cart_item_key );
                wc_add_notice( __('Товар с цветом красный удалён из корзины.', 'woocommerce'), 'error' );
            }
        }
    }
}

3. Как использовать код для других атрибутов

Чтобы исключить товары по другому атрибуту, замените pa_color на нужный slug атрибута, а red — на нужное значение.

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

1. Добавьте в корзину товар с нужным атрибутом (например, цветом красный).

2. Обновите корзину или перейдите к ней.

3. Товар должен автоматически удалиться из корзины, а на экране появится сообщение об этом.

4. Товары без заданного атрибута остаются в корзине.

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

  • Код не срабатывает: убедитесь, что атрибуты товаров действительно зарегистрированы как таксономии с префиксом pa_ и что вы правильно указали slug атрибута.
  • Товары не удаляются: может быть конфликт с другими плагинами, влияющими на корзину. Попробуйте отключить сторонние плагины и проверить снова.
  • Сообщение об ошибке не выводится: убедитесь, что в теме выводятся уведомления WooCommerce через wc_print_notices().
  • Удаляется лишнее: проверьте точность условия strpos(strtolower($colors), 'red'), при необходимости замените на более точные проверки (например, сравнение через explode атрибутов).

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

  • Используйте хук woocommerce_before_calculate_totals с небольшой приоритетом, чтобы исключить лишнюю нагрузку.
  • Не выполняйте тяжелые SQL-запросы внутри функции, лучше использовать встроенные методы WooCommerce для получения атрибутов.
  • Всегда проверяйте, что действие происходит не в админке (кроме AJAX), чтобы не влиять на административную часть.
  • Добавляйте пользовательские уведомления через wc_add_notice, чтобы пользователь понимал причину удаления товара.

Альтернативы: плагин или код?

ВариантПлюсыМинусы
Своя реализация на PHP (как в статье)Гибкость, нет лишних зависимостей, можно кастомизировать под любые атрибутыТребует навыков программирования, ошибки могут повлиять на работу корзины
Плагин фильтрации корзины по атрибутамБыстрое решение, поддержка и обновленияМожет быть избыточным, возможны конфликты, зависимость от стороннего кода
Как добавить атрибуты для оптимизации изображений в WordPress
27.01.2026
WooCommerce: вывод стоимости отсутствующих товаров в корзине и настройка уведомлений
01.06.2026
Как автоматизировать создание отзывов на сайте WordPress с помощью плагинов и кода
12.04.2026
Создаем и оптимизируем кэш в WordPress своими руками: практическое руководство
04.12.2025
Автоматическое удаление неактивных товаров в WooCommerce
13.05.2026

Совсем скоро здесь заработает сайт о вордпресс. И будет он связан с продажами, магазинами или чем-то таким.