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

Когда нужно автоматически менять цену товара по атрибуту в WooCommerce

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

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

Вариации — классический способ установить цену для каждого набора атрибутов. Но у них есть ограничения:

  • Требуется создавать отдельные вариации для каждого сочетания атрибутов, что неудобно при большом ассортименте.
  • Изменение цен вручную на каждой вариации — трудоёмкий процесс.
  • Невозможно задать ценовые правила, например, наценку в процентах, без дополнительного кода или плагина.

Если нужно автоматизировать изменение цен по атрибуту без создания вариаций, понадобится программное решение.

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

1. Определяем атрибут и наценку

Для примера возьмём атрибут "color" (цвет) и для значения "red" увеличим цену на 10%.

2. Используем фильтр woocommerce_product_get_price и woocommerce_product_get_regular_price

Эти фильтры позволяют менять цену товара перед выводом на сайте.

add_filter('woocommerce_product_get_price', 'change_price_by_attribute', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'change_price_by_attribute', 10, 2);

function change_price_by_attribute($price, $product) {
    // Проверяем, что продукт простой
    if(!$product || $product->is_type('variable')) {
        return $price;
    }

    // Получаем атрибуты товара
    $attributes = $product->get_attributes();

    // Проверяем, есть ли нужный атрибут
    if(isset($attributes['pa_color'])) { // 'pa_color' — так WooCommerce хранит атрибуты с префиксом 'pa_'
        $terms = wp_get_post_terms($product->get_id(), 'pa_color');
        foreach($terms as $term) {
            if($term->slug === 'red') { // если цвет красный
                // Увеличиваем цену на 10%
                $price = $price * 1.10;
            }
        }
    }

    return $price;
}

3. Применение для вариаций

Если нужно, чтобы наценка работала и для вариаций, добавьте фильтр и для вариаций:

add_filter('woocommerce_variation_prices_price', 'change_price_by_attribute_variation', 10, 3);
add_filter('woocommerce_variation_prices_regular_price', 'change_price_by_attribute_variation', 10, 3);

function change_price_by_attribute_variation($price, $variation, $product) {
    if(!$variation) {
        return $price;
    }

    $attributes = $variation->get_attributes();

    if(isset($attributes['attribute_pa_color']) && $attributes['attribute_pa_color'] === 'red') {
        $price = $price * 1.10;
    }

    return $price;
}

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

Чтобы убедиться, что цена меняется:

  • Перейдите на страницу товара с атрибутом "color".
  • Выберите значение "red" в атрибуте (если вариации используются) или откройте простой товар с атрибутом "red".
  • Цена должна увеличиться на 10% по сравнению с базовой.
  • Проверьте на фронтенде и в админке (например, через просмотр цены в элементах страницы или отладчик).

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

  • Цена не меняется: проверьте, что атрибуты зарегистрированы с префиксом pa_ и что slug атрибута верный.
  • Изменяется цена вариаций, но не простых товаров или наоборот: убедитесь, что добавлены фильтры и для простых товаров, и для вариаций.
  • Некорректное округление цены: используйте функцию wc_price() для вывода цены или добавьте round() для корректного округления в коде.
  • Кэширование мешает увидеть изменения: очистите кэш сайта и браузера.

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

  • Не делайте тяжелые запросы внутри фильтров изменения цены — получайте данные атрибутов через методы объекта продукта.
  • Кэшируйте результаты, если применяете сложные вычисления на большом количестве товаров.
  • Тестируйте изменения на staging-сайте, чтобы не нарушить работу магазина в продакшене.
  • Для сложных правил ценообразования рассмотрите использование плагинов, например, Clearfy Pro или специализированных решений.

Сравнение методов изменения цены по атрибуту

МетодОписаниеПлюсыМинусы
Создание вариацийРучное создание вариаций с разной ценойПростая настройка, поддержка WooCommerceТрудоемко при большом количестве атрибутов, нет гибкости
Код на фильтрах WooCommerce (пример выше)Динамическое изменение цены в зависимости от атрибутаАвтоматизация, гибкость, нет необходимости создавать вариацииТребует навыков разработки, нужно тестировать
Плагины ценообразованияГотовые решения для сложных правил ценБыстрая настройка, расширенные функцииПлатные, могут влиять на производительность
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
29.12.2025
Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров
31.05.2026
Как автоматизировать удаление неиспользуемых вариативов в WooCommerce
18.05.2026
Использование WPCommunity хуков для автоматизации задач в WordPress
05.01.2026
Автоматическое удаление старых отзывов в WordPress: как настроить и реализовать
03.04.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: