WooCommerce: Исключение товаров по цвету и размеру из корзины

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

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

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

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

Для проверки фактических атрибутов вариации можно вывести их программно:

function print_product_attributes( $cart_item ) {
    $product = $cart_item['data'];
    if ( $product->is_type('variation') ) {
        $attributes = $product->get_attributes();
        foreach ( $attributes as $attr_name => $value ) {
            echo $attr_name . ': ' . $value . '<br>';
        }
    }
}

Подключите такую функцию в хук woocommerce_before_cart, чтобы увидеть атрибуты товаров в корзине и понять, по каким именно значениям фильтровать.

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

1. Определяем атрибуты и значения для исключения

Допустим, нужно исключить товары с цветом "красный" (pa_color) и размером "XL" (pa_size).

2. Создаем функцию для фильтрации корзины

Используем хук woocommerce_before_cart для проверки и удаления товаров:

add_action('woocommerce_before_cart', 'exclude_products_by_attributes_from_cart');
function exclude_products_by_attributes_from_cart() {
    $cart = WC()->cart;
    if ( ! $cart ) return;

    // Значения для исключения
    $exclude_colors = array('red'); // slug цвета
    $exclude_sizes = array('xl'); // slug размера

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        if ( $product->is_type('variation') ) {
            $color = $product->get_attribute('pa_color');
            $size = $product->get_attribute('pa_size');

            if ( in_array(strtolower($color), $exclude_colors) || in_array(strtolower($size), $exclude_sizes) ) {
                $cart->remove_cart_item( $cart_item_key );
                wc_add_notice(sprintf('Товар "%s" удален из корзины, так как недоступен в выбранном цвете или размере.', $product->get_name()), 'error');
            }
        }
    }
}

3. Добавляем уведомление для пользователя

В примере выше уведомление wc_add_notice информирует покупателя, почему товар был удален.

Проверка результата: как убедиться, что исключение работает

  • Добавьте в магазин вариации с цветом "красный" и размером "XL", а также другие.
  • Положите в корзину товары с разными вариантами.
  • Перейдите в корзину — товары с запрещёнными атрибутами должны автоматически удалиться, а на странице будет показано уведомление.
  • Проверьте, что другие товары остались без изменений.

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

  • Неверное имя атрибута: В WooCommerce атрибуты в вариациях всегда хранятся с префиксом pa_. Используйте точные слуги, например, pa_color, а не просто color.
  • Неправильное сравнение значений: Значения атрибутов бывают в нижнем регистре, поэтому лучше использовать strtolower() для сравнения.
  • Удаление в неподходящем хуке: Для удаления товаров из корзины используйте хуки, которые вызываются до отображения корзины, например, woocommerce_before_cart. Хук woocommerce_cart_loaded_from_session также подходит для удаления при загрузке корзины.
  • Отсутствие уведомлений: Если не добавить wc_add_notice, пользователь не поймет, почему товар исчез из корзины.

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

  • Оптимизируйте проверку атрибутов: Не делайте тяжелых запросов в базе, используйте методы объекта товара.
  • Кэширование: Если атрибутов много и логика сложная, можно кэшировать результаты проверки для ускорения.
  • Тестируйте на staging: Перед внедрением в продакшен обязательно проверьте работу на тестовом сайте, чтобы не потерять продажи.
  • Логирование ошибок: Добавьте логирование удаления товаров для последующего анализа через error_log или плагины для отладки.

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

МетодПреимуществаНедостатки
Код в functions.phpПолный контроль, без сторонних плагинов, быстрыйТребует навыков PHP, риск ошибок при неправильном коде
Плагины фильтрации корзиныПростота использования, готовый функционалМогут быть тяжелыми, не всегда гибкие под узкие задачи
Изменение шаблонов WooCommerceМожно изменить вывод и логику отображенияСложнее поддерживать, не всегда подходит для удаления товаров
Как добавить динамические таблицы в WordPress с помощью плагинов и кода
04.02.2026
WooCommerce: как автоматически удалять товары с нулевым запасом из корзины
05.06.2026
Как изменить URL изображения в WordPress без плагинов
18.01.2026
Как создать динамические формы в WordPress с помощью AJAX
18.03.2026
WooCommerce: автоматическое удаление товаров из корзины по атрибутам после оплате
28.05.2026

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