WooCommerce: автоматическое изменение стоимости товаров по акциям с поддержкой Elementor

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

В стандартной связке WooCommerce + Elementor часто возникает задача показать товары с актуальными скидками и изменёнными ценами по акциям. При этом многие пользователи замечают, что цены в каталоге или на лендингах, созданных через Elementor, не обновляются автоматически при изменении акций или цен в админке WooCommerce. Это связано с особенностями кэширования и способами вывода цен в Elementor.

Основные признаки проблемы:

  • Цены на страницах товаров или в каталогах не отражают текущие скидки;
  • При обновлении акции на стороне WooCommerce цены остаются старыми на фронтенде;
  • Использование динамических тегов Elementor для цены не учитывает изменения цен по акциям;

Пошаговое решение: как реализовать автоматическое изменение цены по акции с Elementor

1. Проверка и настройка акций в WooCommerce

Убедитесь, что акции настроены корректно через стандартный механизм «Распродажа» в карточке товара или через плагин для акций. Для вариативных товаров скидка должна быть прописана на уровне вариаций.

2. Использование динамического тега WooCommerce Price в Elementor

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

3. Отключение кэширования для блока с ценой

Чтобы цены обновлялись автоматически, отключите кэширование для блока с ценой или всего виджета. В Elementor Pro это делается через настройки виджета, либо используйте фильтры для исключения кэширования.

4. Добавление PHP-кода для принудительного обновления цены

Если стандартных средств недостаточно, добавьте в functions.php темы следующий код для динамического получения цены с учётом скидок:

add_shortcode('wc_dynamic_price', function($atts) {
    $atts = shortcode_atts(['id' => 0], $atts);
    $product_id = intval($atts['id']);
    if (!$product_id) return '';
    $product = wc_get_product($product_id);
    if (!$product) return '';
    return wc_price($product->get_price());
});

В Elementor вставьте шорткод [wc_dynamic_price id="123"], где 123 — ID товара. Цена будет обновляться динамически с учётом скидок WooCommerce.

5. Обновление цен в списках товаров с помощью AJAX

Для каталогов, где много товаров, можно добавить AJAX-загрузку цен, чтобы избежать кэширования. Пример AJAX-запроса и обработчика:

add_action('wp_ajax_get_product_price', 'get_product_price_ajax');
add_action('wp_ajax_nopriv_get_product_price', 'get_product_price_ajax');
function get_product_price_ajax() {
    $product_id = intval($_POST['product_id']);
    if (!$product_id) wp_send_json_error('No product ID');
    $product = wc_get_product($product_id);
    if (!$product) wp_send_json_error('Invalid product');
    wp_send_json_success(['price' => wc_price($product->get_price())]);
}

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

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

  • Обновите страницу товара или каталога, где был изменён код;
  • Проверьте, что цена меняется при включении/отключении акции в WooCommerce;
  • Используйте инструменты разработчика браузера, чтобы убедиться, что AJAX-запросы корректно возвращают актуальную цену;
  • Если используется кэширование, очистите кеш сайта и браузера;
  • Проверьте работу на разных типах товаров (простые, вариативные).

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

1. Цены не меняются из-за кэширования

Часто плагины кэширования или серверный кеш не обновляют страницу с новыми ценами. Решение — исключить страницы с каталогом/товарами из кэширования или отключить кэш для блоков с ценой.

2. Использование неправильных динамических тегов в Elementor

Не все теги корректно отображают цену с учётом скидок. Используйте именно тег WooCommerce Price или шорткод с динамическим выводом.

3. Некорректное указание ID товара в шорткоде

Проверьте, что ID товара передаётся верно в шорткоде [wc_dynamic_price id=""]. Без ID шорткод вернёт пустой результат.

4. Ошибки в PHP-коде

Код функции для шорткода должен быть вставлен в файл functions.php дочерней темы, без синтаксических ошибок. Рекомендуется проверять ошибки через журнал PHP.

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

  • Не используйте слишком много AJAX-запросов на одной странице — это может увеличить нагрузку на сервер.
  • Кэшируйте результаты AJAX-запросов на стороне клиента, если цена не меняется часто.
  • Используйте дочернюю тему для добавления кастомного кода, чтобы не потерять изменения при обновлении темы.
  • Обязательно делайте резервные копии перед внесением изменений в functions.php.
  • Проверяйте работу на staging-сайте перед переносом на боевой.

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

МетодПреимуществаНедостатки
Динамический тег WooCommerce Price в ElementorПрост в использовании, не требует кодаМожет кэшироваться, не всегда обновляется мгновенно
Шорткод с PHP-кодом в functions.phpГибкий, выводит актуальную цену с учётом скидокТребует базовых знаний PHP, нужно вставлять шорткод вручную
AJAX-загрузка ценОбновление цен без перезагрузки страницы, подходит для каталоговУвеличивает количество запросов к серверу, требует JS
WooCommerce: как разрешить покупателям самостоятельно изменять количество товара в корзине
15.05.2026
Создание динамических отзывов с оценками в Elementor для WordPress
18.02.2026
Как создать собственные атрибуты для виджетов Elementor в WordPress
23.01.2026
Как добавить анимацию в Elementor: практическое руководство
01.01.2026
WooCommerce: как изменить количество отображаемых вариантов товара в Elementor
05.05.2026