WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов

Диагностика задачи: зачем нужна автоматизация изменения цен в WooCommerce

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

Пошаговое решение: как программно изменить цены товаров при акциях

1. Используем хук woocommerce_get_price для динамической подмены цены

Этот фильтр позволяет изменить цену товара в реальном времени при выводе на фронтенде и в админке. Код ниже применяет скидку 20% для всех товаров из категории "sale" в течение заданного периода.

add_filter('woocommerce_get_price', 'apply_sale_discount', 10, 2); 
function apply_sale_discount($price, $product) {
    if (!is_admin()) {
        $sale_cat = 'sale'; // slug категории для акции
        // Проверяем дату акции
        $start_date = strtotime('2024-06-01 00:00:00');
        $end_date = strtotime('2024-06-15 23:59:59');
        $now = current_time('timestamp');
        if ($now >= $start_date && $now <= $end_date) {
            if (has_term($sale_cat, 'product_cat', $product->get_id())) {
                // Применяем скидку 20%
                $price = $price * 0.8;
            }
        }
    }
    return $price;
}

2. Обработка вариативных товаров

Для вариативных товаров нужно использовать фильтр woocommerce_variation_prices_price, чтобы скидка корректно применялась к варьациям:

add_filter('woocommerce_variation_prices_price', 'apply_sale_discount_variations', 10, 3);
function apply_sale_discount_variations($price, $variation, $product) {
    $sale_cat = 'sale';
    $start_date = strtotime('2024-06-01 00:00:00');
    $end_date = strtotime('2024-06-15 23:59:59');
    $now = current_time('timestamp');
    if ($now >= $start_date && $now <= $end_date) {
        if (has_term($sale_cat, 'product_cat', $product->get_id())) {
            $price = $price * 0.8;
        }
    }
    return $price;
}

Как проверить, что автоматическое изменение цен работает

  • Откройте страницу товара, относящегося к категории "sale" в период действия акции.
  • Сравните цену с обычной ценой в админке (в карточке товара).
  • Проверьте, что скидка не применяется вне периода акции.
  • Для вариативных товаров убедитесь, что у каждой вариации цена снижена.
  • Проверьте корзину и оформление заказа — цены должны быть уже со скидкой.

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

  • Скидка не применяется: проверьте, что slug категории совпадает и товары действительно принадлежат к ней.
  • Скидка применяется в админке: в фильтре отключен возврат цены в админке через проверку !is_admin(), убедитесь, что условие не удалено.
  • Цена варьаций не меняется: добавьте фильтр woocommerce_variation_prices_price, так как woocommerce_get_price не всегда срабатывает для вариаций.
  • Проблемы с кешированием: отключите кеширование страницы или настройте кеш так, чтобы цены обновлялись динамически.

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

  • Не меняйте цены в базе данных напрямую, чтобы избежать рассинхронизации и потери истории цен.
  • Используйте кеширование с осторожностью — динамические цены лучше не кешировать на уровне страницы.
  • Проверяйте нагрузку на сервер при большом каталоге — фильтры вызываются при каждом запросе цены.
  • Для сложных акций лучше использовать отдельные таблицы или мета-данные с кешированием результатов.

Сравнение подходов: плагин или кастомный код

МетодПреимуществаНедостаткиКомпромисс
Плагин (например, WooCommerce Dynamic Pricing)Готовое решение, много настроек, поддержкаНагрузка на сайт, зависимость от обновлений, платные версииИспользовать для сложных акций
Кастомный код (фильтры цен)Легковесно, гибко, без лишних зависимостейТребует поддержки, ограничена сложность правилПодходит для простых и средних акций

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как отключить переход в корзину и сразу вести на оформление заказа
09.08.2026
Как избежать проблем с вариациями товаров WooCommerce при массовом импорте
24.09.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
29.09.2026
Как добавить поддержку WebP в WordPress без плагинов
03.10.2026
Как отключить архивы таксономий в WordPress и убрать пустые страницы из индекса
24.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »