Автоматическое изменение цены товара 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 (пример выше)Динамическое изменение цены в зависимости от атрибутаАвтоматизация, гибкость, нет необходимости создавать вариацииТребует навыков разработки, нужно тестировать
Плагины ценообразованияГотовые решения для сложных правил ценБыстрая настройка, расширенные функцииПлатные, могут влиять на производительность
Как автоматизировать удаление старого контента в WordPress
13.01.2026
Как удалить неиспользуемые таблицы в базе данных WordPress для оптимизации
20.11.2025
Как использовать REST API WordPress для получения пользовательских данных
01.01.2026
Как удалить варианты товаров WooCommerce при удалении атрибута
26.04.2026
Оптимизация REST API ответов в WordPress: практические решения и примеры
25.12.2025

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