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

|

Диагностика проблемы: почему нельзя изменить цену товара через стандартный интерфейс акций WooCommerce

Многие владельцы магазинов на WooCommerce сталкиваются с необходимостью массового изменения цен товаров во время акций, скидок или распродаж. Стандартный функционал WooCommerce позволяет задать скидку через поле «Цена по распродаже», однако это требует ручного ввода для каждого товара, что неудобно при большом каталоге.

Кроме того, при использовании динамических акций с разными условиями (категории, метки, даты) стандартные возможности не всегда позволяют гибко управлять ценами без установки дополнительных плагинов. Часто возникает задача автоматически применять скидку на определённые товары при выполнении условий акции.

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

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

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

Этот фильтр позволяет изменить цену товара на лету. Ниже пример кода, который снижает цену товаров категории "акции" на 20%:

add_filter('woocommerce_get_price', 'custom_discount_price', 10, 2);
function custom_discount_price($price, $product) {
    if (is_admin()) return $price; // не менять в админке

    if (has_term('aktsii', 'product_cat', $product->get_id())) { // категория 'акции'
        $discount = 0.20; // 20% скидка
        $new_price = $price * (1 - $discount);
        return round($new_price, 2);
    }
    return $price;
}

Расширение: учёт даты акции

Чтобы скидка применялась только в определённые даты, добавим проверку по текущей дате:

add_filter('woocommerce_get_price', 'custom_discount_price_date', 10, 2);
function custom_discount_price_date($price, $product) {
    if (is_admin()) return $price;

    $start_date = strtotime('2024-07-01');
    $end_date = strtotime('2024-07-15');
    $today = time();

    if ($today >= $start_date && $today <= $end_date) {
        if (has_term('aktsii', 'product_cat', $product->get_id())) {
            $discount = 0.20;
            $new_price = $price * (1 - $discount);
            return round($new_price, 2);
        }
    }
    return $price;
}

Пошаговое руководство по применению кода

  1. Создайте дочернюю тему, если её ещё нет, чтобы не потерять изменения при обновлении.
  2. Откройте файл functions.php дочерней темы.
  3. Вставьте один из приведённых выше фрагментов кода в конец файла.
  4. Убедитесь, что у товаров, на которые должна применяться скидка, есть категория с ярлыком aktsii (сделайте это в админке WooCommerce).
  5. Задайте даты акции в коде или удалите проверку по дате, если она не нужна.
  6. Сохраните изменения и загрузите файл на сервер, если редактировали локально.

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

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

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

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

Сравнение подходов: плагин vs код в functions.php

КритерийРешение через плагинРешение через кодКомпромисс
ГибкостьВысокая, готовые настройкиМаксимальная, при кастомизацииКод требует навыков
ПроизводительностьМожет быть ниже из-за общего веса плагинаВыше при оптимальном кодеРиск ошибок при неправильном коде
ОбновленияОбновляется разработчикомТребует ручного сопровожденияЗависит от квалификации разработчика
БезопасностьПроверена сообществомЗависит от качества кодаТребуется тестирование
Интеграция с другими функциямиЧасто встроенаНужно писать самомуВысокая кастомизация
Как создать автоматический импорт постов в WordPress с примерами и плагинами
24.02.2026
Как избежать проблем с дублированием артикулов (SKU) при массовом импорте товаров в WooCommerce
08.05.2026
Как добавить настройки в админ-панель WordPress: пошаговое руководство с примерами кода
27.11.2025
WooCommerce: как отключить переход в корзину и сразу вести на оформление заказа
09.08.2026
Как создать автоматическое отключение подписок в WordPress по условиям
28.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше