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

|

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

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

Автоматизация изменения цен при акциях позволяет:

Как работает автоматическое изменение цен в WooCommerce через код

Основная идея — перехватывать вывод цены товара и динамически изменять её в зависимости от условий акции (например, дата, категория товара, пользовательская роль и т.п.). Для этого используется хук woocommerce_get_price_html или фильтр woocommerce_product_get_price.

Рассмотрим пример кода, который применяет 20% скидку на все товары из категории "Распродажа" в период с 1 по 10 июля 2024 года.

Пример кода для автоматической скидки

add_filter('woocommerce_product_get_price', 'auto_discount_price', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'auto_discount_price', 10, 2);
add_filter('woocommerce_get_price_html', 'auto_discount_price_html', 10, 2);

function auto_discount_price($price, $product) {
    // Проверяем дату акции
    $start = strtotime('2024-07-01');
    $end = strtotime('2024-07-10');
    $now = time();
    if ($now < $start || $now > $end) {
        return $price; // вне периода акции
    }

    // Проверяем, что товар в нужной категории
    if (has_term('rasprodazha', 'product_cat', $product->get_id())) {
        $discount = 0.2; // 20% скидка
        return round($price * (1 - $discount), 2);
    }

    return $price;
}

function auto_discount_price_html($price_html, $product) {
    $start = strtotime('2024-07-01');
    $end = strtotime('2024-07-10');
    $now = time();
    if ($now < $start || $now > $end) {
        return $price_html;
    }

    if (has_term('rasprodazha', 'product_cat', $product->get_id())) {
        $regular_price = wc_price($product->get_regular_price());
        $discounted_price = wc_price(auto_discount_price($product->get_regular_price(), $product));
        return '<del>' . $regular_price . '</del> <ins>' . $discounted_price . '</ins>';
    }
    return $price_html;
}

Пошаговое внедрение решения

  1. Добавьте код в файл functions.php активной темы или в собственный плагин.
  2. Убедитесь, что в вашей товарной категории есть категория с ярлыком (slug) rasprodazha и товары в ней.
  3. Настройте даты акции, изменив переменные $start и $end в формате YYYY-MM-DD.
  4. Очистите кэш сайта и браузера, если используется кэширование.
  5. Проверьте отображение цен на странице товаров из категории "Распродажа" в указанный период.

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

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

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

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

Метод Преимущества Недостатки
Код на хуках (как в статье) Полный контроль, нет нагрузки на базу, бесплатно Требует навыков, ограниченная гибкость без доработок
Плагины для скидок (например, WooCommerce Dynamic Pricing) Готовые решения, удобный UI, много функций Платные, могут тормозить сайт, конфликтовать с другими плагинами
Ручное выставление скидок в админке WooCommerce Просто использовать, без кода Не подходит для больших каталогов и частых акций
Как добавить автоматическое удаление старого контента в WordPress
14.02.2026
Как изменить количество постов в выводах WordPress без плагинов
03.04.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
15.07.2026
Как добавить настройки в админ-панель WordPress: пошаговое руководство с примерами кода
27.11.2025
Автоматическое удаление старых комментариев в WordPress: практические решения и примеры кода
21.03.2026
×

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

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

пишет статьи

готовит SEO

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

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