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

Почему важно автоматизировать изменение цен при акциях в WooCommerce?

Ручное обновление цен товаров во время распродаж и акций — частая причина ошибок и потери времени. Автоматизация позволяет:

  • Избежать человеческих ошибок при обновлении цен.
  • Обеспечить единообразие скидок на группы товаров.
  • Быстро менять цены в зависимости от условий акции.

Рассмотрим, как с помощью стандартных хуков WooCommerce и функций PHP автоматически изменять цены товара при акциях без сторонних плагинов.

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

Если вы настроили акции вручную, но цены не отображаются с учетом скидок на витрине или в корзине, возможно:

  • Вы не используете правильные хуки для изменения цены.
  • Кэширование блокирует динамическое обновление цен.
  • Конфликт с темой или другим плагином, который переопределяет цены.

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

Пошаговое решение: автоматическое изменение цены с учетом акции

1. Добавление фильтра для изменения цены товара

В файл functions.php вашей дочерней темы или в кастомный плагин добавьте следующий код:

add_filter('woocommerce_product_get_price', 'custom_dynamic_sale_price', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_dynamic_sale_price', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'custom_dynamic_sale_price', 10, 2);

function custom_dynamic_sale_price($price, $product) {
    if (!$product->is_on_sale()) {
        // Проверяем условие для акции, например, категория или тег
        if (has_term('sale-category', 'product_cat', $product->get_id())) {
            // Пример: скидка 20% на товары категории 'sale-category'
            $discounted_price = $price * 0.8;
            return round($discounted_price, 2);
        }
    }
    return $price;
}

Этот код проверяет, находится ли товар в категории sale-category. Если да, то цена уменьшается на 20%. Можно заменить условие на тег, мета-данные или другие параметры.

2. Автоматическое обновление цены в корзине и на странице товара

Чтобы цена корректно отображалась в корзине, добавьте:

add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 10, 1);

function custom_cart_item_price($cart) {
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_on_sale()) {
            if (has_term('sale-category', 'product_cat', $product->get_id())) {
                $original_price = $product->get_price();
                $new_price = $original_price * 0.8; // скидка 20%
                $product->set_price(round($new_price, 2));
            }
        }
    }
}

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

1. Откройте страницу товара из категории sale-category и убедитесь, что цена уменьшена на 20%.

2. Добавьте товар в корзину и проверьте, что итоговая цена в корзине соответствует скидке.

3. Очистите кэш сайта и браузера, если скидка не отображается сразу.

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

  • Скидка не применяется на странице товара: Проверьте, что фильтры добавлены с приоритетом 10 и что условие (категория, тег) прописано корректно.
  • Цена не меняется в корзине: Убедитесь, что woocommerce_before_calculate_totals используется и код не конфликтует с другими плагинами.
  • Кэш блокирует обновление цены: Отключите кэширование страниц для страниц с корзиной и товарами, либо используйте AJAX для динамического обновления.
  • Формат чисел: Округляйте цены до двух знаков после запятой, чтобы избежать ошибок отображения.

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

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

Сравнение подходов изменения цен при акциях

СпособПлюсыМинусыКомпромисс
Ручное изменение цен в админкеПросто, без кодаДолго, ошибки, нет автоматизацииПодходит для небольшого количества товаров
Плагины для скидок и акцийМного функций, гибкостьДополнительная нагрузка, возможные конфликтыИспользовать проверенные плагины, например Clearfy Pro для оптимизации
Код с хуками WooCommerce (этот метод)Легко кастомизируется, без лишних плагиновНужно писать и тестировать кодОптимально для разработчиков, контролирующих весь сайт

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

⭐⭐⭐⭐⭐
Как сделать автоматическое удаление старых мета данных в WordPress
18.09.2026
Как отключить архивы дат в WordPress и убрать лишние страницы из индекса
21.09.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
25.09.2026
Как добавить обработку файлов в REST API WordPress с примерами кода
21.09.2026
Автоматическое удаление старых файлов из медиа библиотеки WordPress
24.09.2026
×
-15%
на премиум-тему
Bono

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

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