WooCommerce: автоматическое отслеживание и изменение стоимости товаров при сменах вариаций

В чем заключается проблема с обновлением цены при смене вариаций в WooCommerce?

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

Диагностика проблемы

Чтобы понять, почему цена не обновляется корректно, нужно проверить несколько моментов:

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

Для проверки откройте страницу товара в режиме разработчика в браузере (F12) и посмотрите консоль на наличие ошибок. Затем откройте вкладку Network и убедитесь, что AJAX-запросы при смене вариации выполняются без ошибок.

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

Если стандартный функционал не подходит, можно использовать собственный JavaScript для отслеживания смены вариаций и динамического обновления цены на странице.

1. Добавление кастомного JavaScript для отслеживания выбора вариации

Добавьте следующий скрипт в файл functions.php вашей темы или в отдельный JS-файл, подключаемый через wp_enqueue_scripts:

jQuery(document).ready(function($){
  $('.variations_form').on('found_variation', function(event, variation) {
    // variation - объект с данными выбранной вариации
    if(variation && variation.display_price){
      var price_html = variation.price_html; // html с ценой
      // Обновляем блок с ценой товара
      $('.woocommerce-variation-price').html(price_html);
    }
  });
});

Этот код слушает событие found_variation, которое триггерится WooCommerce при выборе вариации, и подставляет цену вариации в блок с классом woocommerce-variation-price.

2. Обеспечение корректного отображения цены

Убедитесь, что в шаблоне товара есть контейнер для отображения цены вариации. Если стандартного блока нет, добавьте этот код в файл single-product/add-to-cart/variable.php вашей темы (желательно в дочерней):

<div class="woocommerce-variation-price"><?php echo $product->get_price_html(); ?></div>

Это позволит скрипту динамически заменять содержимое блока при смене вариации.

3. Пример динамического изменения цены с учетом пользовательских условий

Если нужно добавить наценку или скидку при выборе вариации, можно расширить JS-код, например:

$('.variations_form').on('found_variation', function(event, variation) {
  if(variation && variation.display_price){
    var base_price = variation.display_price;
    var custom_markup = 100; // например, наценка 100 рублей
    var new_price = base_price + custom_markup;
    // Форматируем цену с учетом валюты
    var formatted_price = new_price.toLocaleString('ru-RU', {style: 'currency', currency: 'RUB'});
    $('.woocommerce-variation-price').html('<span class="amount">' + formatted_price + '</span>');
  }
});

Как проверить, что решение сработало?

  • Обновите страницу товара и откройте консоль браузера — ошибок быть не должно.
  • Выберите разные вариации товара — цена в блоке .woocommerce-variation-price должна меняться без перезагрузки страницы.
  • При использовании кастомных наценок или скидок цена должна отражать эти изменения.
  • Проверьте, что добавление товара в корзину происходит с правильной ценой (через тестовую покупку или просмотр корзины).

Частые ошибки и способы их исправления

  • Скрипт не срабатывает: Убедитесь, что jQuery и wc-add-to-cart-variation.js загружены. Проверьте, что класс .variations_form присутствует на странице.
  • Блок для цены отсутствует или имеет другой класс: Скорректируйте селектор в JS-коде под вашу тему, или добавьте нужный контейнер в шаблон.
  • Цена не отображается корректно (например, без валюты): Используйте функции локализации JavaScript или возвращайте HTML цены с сервера, а не только число.
  • Конфликты с другими плагинами: Отключайте другие плагины по очереди, чтобы выявить конфликт, и корректируйте порядок загрузки скриптов.

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

  • Минимизируйте объем кастомного JS, используйте только нужный код для вариаций.
  • Обязательно тестируйте на нескольких браузерах и устройствах.
  • Для более сложной логики изменения цен лучше реализовать серверную обработку через AJAX, чтобы избежать ошибок на клиенте.
  • Если меняете цену программно, убедитесь, что итоговая цена подтягивается в корзину и при оформлении заказа — для этого можно использовать фильтр woocommerce_product_get_price в PHP.

Сравнение вариантов решения задачи

МетодПлюсыМинусыПример использования
Стандартный функционал WooCommerceНативно поддерживается, без кодаНе всегда подходит для кастомных тем и условийАвтоматическое обновление цены через wc-add-to-cart-variation.js
Кастомный JS для замены ценыГибкий, можно добавить логику на клиентеЗависит от правильного подключения скриптов, не защищен от манипуляцийПример кода выше
Серверная обработка через AJAX и PHPБезопасно, можно комплексно менять ценуСложнее в реализации, требует дополнительного кода и запросовФильтры WooCommerce и AJAX-хуки
Как удалить все комментарии в WordPress программно
15.04.2026
Как создать подписку на email в WordPress с AJAX без плагинов
25.03.2026
Как использовать AJAX для обновления контекста в WordPress без перезагрузки страницы
20.02.2026
WooCommerce: автоматическая обработка возвратов и возврат денег через хук
24.06.2026
WooCommerce: автоматическое изменение стоимости товара при смене вариации
01.06.2026