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

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

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

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

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

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    $product = $cart_item['data']; // WC_Product объект
    // Получаем атрибуты
    $attributes = $product->get_attributes();
    // Можно проверить нужный атрибут
}

Для вариативных товаров атрибуты хранятся в $cart_item['variation_attributes'].

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

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

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

2. Используем хук woocommerce_check_cart_items для проверки и удаления

Хук запускается при проверке содержимого корзины перед оформлением заказа.

add_action( 'woocommerce_check_cart_items', function() {
    $cart = WC()->cart;
    $items_to_remove = [];

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $variation_attributes = isset($cart_item['variation_attributes']) ? $cart_item['variation_attributes'] : [];

        // Проверяем, есть ли нужный атрибут и совпадает ли значение
        if ( isset( $variation_attributes['attribute_pa_color'] ) && $variation_attributes['attribute_pa_color'] === 'red' ) {
            $items_to_remove[] = $cart_item_key;
        }
    }

    // Удаляем найденные товары из корзины
    foreach( $items_to_remove as $key_to_remove ) {
        $cart->remove_cart_item( $key_to_remove );
    }

    if ( ! empty( $items_to_remove ) ) {
        wc_add_notice( 'Товары красного цвета запрещены к покупке и были удалены из корзины.', 'error' );
    }
} );

3. Где разместить код

Этот код можно добавить в файл functions.php текущей темы или в пользовательский плагин.

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

  1. Добавьте в корзину товар с атрибутом pa_color=red — он должен автоматически удалиться с сообщением об ошибке.
  2. Добавьте товар с другими значениями атрибута — он должен остаться в корзине.
  3. Проверьте, что оформление заказа проходит без ошибок, если в корзине нет запрещённых товаров.

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

  • Неправильное имя атрибута: WooCommerce добавляет префикс attribute_pa_ к slug атрибута. Например, атрибут Цвет с ярлыком color. Нужно использовать именно attribute_pa_color, а не color.
  • Проверка не для вариаций: если товар простой (simple product), атрибуты нужно проверять через $product->get_attributes(), а не в variation_attributes.
  • Код не срабатывает: убедитесь, что WooCommerce активен и что код подключен корректно (в functions.php или плагине).

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

  • Для многоязычных сайтов учитывайте, что значение атрибута может быть локализовано. Лучше сравнивать slug, а не названия.
  • Если исключать нужно сложные комбинации атрибутов, используйте дополнительные проверки через $product->get_attributes() и функции WooCommerce для парсинга.
  • Для контроля логики исключения можно добавить опцию в админку с помощью Settings API.

Сравнение подходов: плагин vs код

ПодходПлюсыМинусы
Код в functions.phpБыстро, без нагрузки, кастомизация под задачуТребует навыков, сложнее поддерживать для новичков
Плагин (например, Conditional WooCommerce Plugins)Готовое решение, настройки через UIМожет быть избыточным, нагрузка, не всегда гибко
WooCommerce: автоматическое изменение стоимости товаров при оплате с помощью кода
07.05.2026
Оптимизация работы с кэшем в WordPress: практические советы и примеры
12.01.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате с поддержкой купонов
26.05.2026
Как создать автоматически обновляемый сайт на WordPress с помощью WPRemark
12.03.2026
Как использовать REST API для создания кастомизированных решений в WordPress
06.12.2025