Если на странице товара WooCommerce выбирается вариация, но цена, старая цена, наличие или кнопка покупки не меняются, проблема обычно не в самой вариации, а в конфликте шаблона, скриптов или кастомного кода. Ниже — рабочая схема диагностики и исправления без лишних догадок.
Как выглядит проблема на практике
Типичный сценарий: у товара несколько вариаций, пользователь меняет размер или цвет, но цена остается прежней. Иногда меняется только часть данных — например, название вариации подставляется, а цена и наличие нет. В других случаях блок вариаций вообще перестает реагировать после обновления темы или плагина.
Чаще всего это происходит в трех случаях:
- тема переопределяет шаблон
single-product/add-to-cart/variable.phpили связанные скрипты; - сторонний плагин меняет вывод цены, не учитывая вариативный товар;
- кастомный JS ломает стандартное событие WooCommerce
found_variationилиshow_variation.
Диагностика проблемы
Сначала нужно понять, где именно ломается цепочка: в данных вариации, в PHP-шаблоне или в JavaScript. Это экономит время, потому что одинаковый симптом может иметь разные причины.
Проверьте, есть ли корректные данные у вариации
Откройте товар в админке и убедитесь, что у каждой вариации заполнены цена, статус наличия и атрибуты. Если цена пустая, фронтенд ничего не покажет — это не ошибка темы.
Полезно также проверить, что WooCommerce действительно отдает данные вариации через AJAX. Для этого на странице товара откройте DevTools → Network и выберите вариацию. В запросе к ?wc-ajax=get_variation или в ответе скрипта должны быть поля с ценой и HTML для вариации.
Проверьте консоль браузера
Если в консоли есть ошибки JavaScript, сначала исправьте их. Один сломанный скрипт на странице товара может остановить обработку событий WooCommerce. Особенно часто это бывает после подключения минифицированных скриптов, старых библиотек jQuery или кастомных обработчиков на change без учета стандартной логики WooCommerce.
Проверьте, не переопределен ли шаблон
Если тема содержит копию шаблона WooCommerce, сравните ее с актуальной версией плагина. Устаревший шаблон может не выводить нужные data-атрибуты или не подключать стандартные скрипты вариативного товара.
| Подход | Когда подходит | Минус |
|---|---|---|
| Исправить данные вариаций | Если цена не задана или атрибуты не совпадают | Не решает конфликт скриптов |
| Обновить/сверить шаблон | Если проблема появилась после смены темы | Нужно аккуратно сравнивать правки |
| Исправить JS-обработчик | Если цена меняется только частично или с ошибкой | Требует проверки в консоли и на фронтенде |
Пошаговое решение
1. Убедитесь, что WooCommerce загружает стандартные скрипты
На странице товара должен быть подключен скрипт вариативных товаров. Если тема или оптимизатор отключили его, выбор вариации работать не будет.
add_action('wp_enqueue_scripts', function () {
if (function_exists('is_product') && is_product()) {
wp_enqueue_script('wc-add-to-cart-variation');
}
});Этот код не нужен в нормальной установке, но полезен как проверка: если после принудительного подключения поведение меняется, значит проблема была в отключении скрипта темой или оптимизацией.
2. Проверьте, не перезаписывается ли цена в шаблоне
Если тема выводит цену вручную через собственный шаблон, она может показывать только базовую цену товара, а не цену выбранной вариации. В таком случае лучше не собирать цену вручную, а использовать стандартный вывод WooCommerce и события вариаций.
Если нужно принудительно обновлять блок цены, можно привязаться к событию found_variation и подставлять HTML из ответа WooCommerce:
jQuery(function($) {
var $form = $('form.variations_form');
var $price = $('.summary .price');
$form.on('found_variation', function(event, variation) {
if (variation && variation.price_html) {
$price.html(variation.price_html);
}
});
$form.on('reset_data', function() {
$price.html('');
});
});Этот вариант подходит только если тема не делает этого сама. Если у вас уже есть стандартное обновление цены, не дублируйте его — иначе можно получить мигание или двойную подмену HTML.
3. Если цена не меняется из-за кастомного JS, уберите конфликт
Частая ошибка — обработчик change на селектах вариаций, который перерисовывает блок товара и сбрасывает состояние формы. В результате WooCommerce не успевает обработать выбор.
Безопаснее не трогать DOM формы напрямую, а реагировать на события WooCommerce:
jQuery(function($) {
$('.variations_form')
.on('found_variation', function(event, variation) {
console.log('Variation found:', variation.variation_id);
})
.on('show_variation', function(event, variation) {
console.log('Variation shown:', variation.price_html);
})
.on('hide_variation', function() {
console.log('Variation hidden');
});
});Если после удаления собственного обработчика проблема исчезает, значит конфликт был именно в нем. Тогда переносите логику на события WooCommerce, а не на прямую замену HTML формы.
4. Сбросьте кэш и проверьте минификацию
Если используется кэш страниц, JS-оптимизация или объединение файлов, очистите кэш и временно отключите минификацию. Иногда старый JS-файл продолжает отдаваться после обновления темы, и вариации ломаются только у части пользователей.
Особенно внимательно проверьте:
- кэш плагина;
- серверный кэш;
- CDN;
- объединение и отложенную загрузку JavaScript;
- исключения для скриптов WooCommerce.
Как проверить, что исправление сработало
После внесения изменений не ограничивайтесь визуальной проверкой на одной вариации. Пройдите короткий чек-лист:
- выберите несколько разных вариаций и убедитесь, что цена меняется;
- проверьте, обновляется ли наличие и кнопка покупки;
- сбросьте выбор и посмотрите, возвращается ли базовое состояние;
- откройте консоль браузера и убедитесь, что новых ошибок нет;
- проверьте страницу в режиме инкогнито, чтобы исключить влияние кэша браузера и авторизации.
Если проблема была в шаблоне, сравните HTML блока цены до и после выбора вариации. Если был конфликт JS, в консоли должны появляться события found_variation и show_variation, а не ошибки.
Частые ошибки и как их исправить
Цена задана не у всех вариаций
Если у одной из вариаций нет цены, WooCommerce может вести себя нестабильно: часть данных обновляется, часть — нет. Проверьте все вариации вручную, особенно после импорта из CSV.
Тема выводит собственный блок цены
Когда тема не использует стандартные хуки WooCommerce, обновление цены может не доходить до видимого блока. Решение — либо вернуть стандартный вывод, либо явно обновлять нужный контейнер через price_html.
Скрипт вариаций отключен оптимизатором
Некоторые плагины ускорения агрессивно объединяют или откладывают JS. Если после отключения оптимизации все начинает работать, добавьте исключение для wc-add-to-cart-variation и связанных скриптов WooCommerce.
Кастомный код перезаписывает форму товара
Если после выбора вариации страница перерисовывает блок товара целиком, стандартные события WooCommerce теряются. В этом случае не обновляйте форму через .html() без необходимости — лучше менять только нужный фрагмент.
Практические советы по безопасности и производительности
Не правьте файлы плагина WooCommerce напрямую. Любое обновление затрёт изменения, и проблема вернется в самый неудобный момент. Для кастомизации используйте дочернюю тему или небольшой mu-plugin.
Если вы добавляете свой JS, подключайте его только на страницах товара. Это уменьшит риск конфликтов и не будет грузить лишний код на остальных страницах сайта.
add_action('wp_enqueue_scripts', function () {
if (function_exists('is_product') && is_product()) {
wp_enqueue_script(
'my-product-variation-fix',
get_stylesheet_directory_uri() . '/js/product-variation-fix.js',
array('jquery', 'wc-add-to-cart-variation'),
'1.0.0',
true
);
}
});Если на сайте много правок вокруг WooCommerce, полезно держать отдельный список исключений для кэша и оптимизации. Это проще, чем каждый раз искать, почему после очередного обновления снова перестала меняться цена вариации.
Когда проблема связана не с кодом, а с накопившимися дублями шаблонов, настройками и лишними скриптами, имеет смысл сначала навести порядок в базе и фронтенде. Для этого иногда используют Clearfy Pro, но только как инструмент чистки и отключения лишнего, а не как замену нормальной диагностике: https://wpshop.ru/plugins/clearfy?utm_source=wp-team.ru&utm_medium=article&utm_campaign=woocommerce-fix-variation-price-not-updating
Если после всех проверок поведение остается нестабильным, сравните страницу товара на стандартной теме и на вашей текущей. Такой тест быстро показывает, проблема в WooCommerce, в теме или в стороннем коде. Это самый практичный способ не лечить симптом, когда источник сбоя находится в шаблоне или оптимизации.