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

|

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

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

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

Диагностика задачи: когда и как менять цены автоматически

Перед реализацией нужно понять:

Пример: скидка 15% на все товары из категории "Обувь" с 1 по 10 июля.

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

WooCommerce позволяет менять цену товара на лету с помощью фильтра woocommerce_get_price или woocommerce_product_get_price. Это значит, что не нужно менять цены в базе — достаточно динамично подменять выводимую цену.

Пример кода для применения скидки 15% на товары из категории "obuv":

add_filter('woocommerce_product_get_price', 'custom_discount_on_category', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_discount_on_category', 10, 2);

function custom_discount_on_category($price, $product) {
    if ( ! is_admin() ) { // Чтобы не влиять на админку
        $category_slug = 'obuv';
        $start_date = strtotime('2024-07-01');
        $end_date = strtotime('2024-07-10');
        $now = time();

        if ($now >= $start_date && $now <= $end_date && has_term($category_slug, 'product_cat', $product->get_id())) {
            $discount = 0.15; // 15%
            $new_price = $price * (1 - $discount);
            return round($new_price, 2);
        }
    }
    return $price;
}

Этот код подключается в файл functions.php вашей темы или в собственный плагин. Он проверяет, что текущая дата попадает в диапазон акции, и если товар принадлежит к категории «obuv», то цена уменьшается на 15%.

Почему фильтруем и регулярную, и текущую цену

Чтобы WooCommerce корректно отображал цену и расчет скидок, нужно менять как обычную цену, так и регулярную. Иначе могут возникать ошибки в выводе или расчётах.

Проверка результата

1. Зайдите на страницу товара из категории "obuv" в публичной части сайта в период действия акции (1-10 июля). Цена должна быть ниже на 15% от обычной.

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

3. Чтобы проверить работу кода в любой момент, временно измените даты акции на текущие и обновите страницу товара.

4. Для отладки добавьте временно вывод error_log внутри функции, например:

error_log('Original price: ' . $price . ', discounted price: ' . $new_price);

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

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

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

МетодПлюсыМинусы
Фильтр цены в коде (как в статье)Гибко, не требует плагинов, безопасно для базыТребует навыков программирования, может влиять на производительность при больших объёмах
Плагины для скидок (например, WooCommerce Dynamic Pricing)Много опций, удобный интерфейсДобавляют нагрузку, могут конфликтовать, требуют обновлений
Ручное изменение цен через CSV импортКонтроль над ценами, массовое обновлениеРиск ошибок, неудобство при частых акциях
Как изменить количество постов в выводах WordPress без плагинов
03.04.2026
Создать и использовать шорткод для вывода продуктов WPShop в WordPress
28.03.2026
Как использовать хуки в WordPress для расширения функциональности
11.11.2025
Как создать фильтр по авторам в WordPress с поддержкой AJAX
31.03.2026
Как создать автоматический импорт постов в WordPress с поддержкой виджетов
24.03.2026
×

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

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

пишет статьи

готовит SEO

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

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