WooCommerce: изменение стоимости вариативных товаров в зависимости от выбранных атрибутов

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

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

Проверяем настройки вариаций

  • Убедитесь, что у вариаций указана своя цена (Regular Price или Sale Price).
  • Все вариации должны быть опубликованы и не иметь статуса «черновик» или «отключено».
  • В настройках вариативного товара должен быть выбран тип атрибутов, а атрибуты должны быть помечены для использования в вариациях.

Диагностика JavaScript

Откройте консоль браузера (F12 - вкладка Console) и проверьте наличие ошибок JavaScript, связанных с WooCommerce или jQuery. Ошибки блокируют обновление цены.

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

  1. Проверьте и задайте цены для всех вариаций. В админке WooCommerce → Товары → выберите вариативный товар → вкладка «Вариации». Для каждой вариации заполните поля «Цена».
  2. Обновите тему и плагины. Конфликты скриптов часто возникают из-за устаревших версий. Проверьте совместимость с WooCommerce.
  3. Подключите стандартные скрипты WooCommerce, если тема их отключает. Добавьте в functions.php вашей темы:
  4. function wp_pro_enqueue_wc_scripts() {
        if ( function_exists('is_product') && is_product() ) {
            wp_enqueue_script('wc-add-to-cart-variation');
        }
    }
    add_action('wp_enqueue_scripts', 'wp_pro_enqueue_wc_scripts');
    
  5. Проверьте HTML шаблон single-product/add-to-cart/variable.php в вашей теме. Если он переопределён, убедитесь, что он содержит вызов do_action('woocommerce_single_variation') и do_action('woocommerce_single_variation_add_to_cart_button') для корректной работы скриптов.
  6. Очистите кэш браузера и плагинов кэширования. Иногда старые скрипты блокируют обновление цены.

Пример кастомного изменения цены вариаций через фильтр

Если требуется динамически менять цену вариации через код (например, добавлять скидку или наценку), используйте фильтр woocommerce_product_variation_get_price:

add_filter('woocommerce_product_variation_get_price', 'wp_pro_custom_variation_price', 10, 2);
function wp_pro_custom_variation_price($price, $variation) {
    // Добавим 10% скидку на все вариации с определённым атрибутом
    $attributes = $variation->get_attributes();
    if (isset($attributes['pa_color']) && $attributes['pa_color'] === 'red') {
        $price = $price * 0.9; // скидка 10%
    }
    return $price;
}

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

  • Откройте страницу вариативного товара в браузере в режиме инкогнито.
  • Выберите разные варианты атрибутов и убедитесь, что цена меняется автоматически без перезагрузки.
  • Проверьте консоль браузера на отсутствие ошибок JavaScript.
  • Если использовали фильтр для изменения цены, проверьте, что цены обновились с учётом логики (например, скидка появилась на нужные вариации).

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

  • Отсутствие цены у вариаций: вариация без цены не будет отображать корректную стоимость. Заполните поле цены.
  • Переопределённые шаблоны темы: кастомные шаблоны без вызова нужных хуков блокируют функционал. Сравните ваш шаблон с оригиналом WooCommerce.
  • Ошибки JavaScript: несовместимые плагины или темы могут конфликтовать с wc-add-to-cart-variation.js. Отключайте плагины по одному для поиска виновника.
  • Отключённые скрипты WooCommerce: некоторые темы или плагины отключают стандартные скрипты для оптимизации, что ломает динамическое обновление цены.

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

  • Используйте дочернюю тему для внесения правок, чтобы не потерять их при обновлении.
  • Кэшируйте только статику, динамическое содержимое (цены вариаций) не должно кэшироваться на уровне сервера.
  • Минимизируйте количество плагинов, которые вмешиваются в работу вариаций, чтобы избежать конфликтов.
  • Регулярно обновляйте WooCommerce и тему для защиты от уязвимостей.
  • Для SEO лучше, чтобы цены вариаций были корректно отображены в микроразметке Schema.org — проверьте их через инструменты Google.

Сравнение подходов: плагин vs кодовое решение для динамического изменения цены вариаций

МетодПреимуществаНедостатки
Использование плагина (например, WooCommerce Dynamic Pricing)Готовое решение с UI, множество правил, поддержка и обновленияДополнительная нагрузка, возможные конфликты, платные версии
Кодовое решение (фильтры и хуки)Легковесность, гибкость, полный контрольТребует навыков разработки, сложнее поддерживать при сложных правилах
Как добавить автоподсказку в поиск WordPress
21.03.2026
Кастомизация отчетов WooCommerce с помощью хуков и фильтров
13.12.2025
WooCommerce: как изменить URL товара после изменения атрибутов
07.05.2026
Как автоматически удалять пустые термины в таксономиях WordPress
12.04.2026
Как автоматизировать удаление старых записей в WordPress с помощью WP-Cron и кастомных функций
16.04.2026