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

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

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

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

WooCommerce позволяет менять цену товара динамически через хук woocommerce_get_price или woocommerce_product_get_price. Расмотрим пример, как применить скидку 20% на все товары из категории "Распродажа".

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

function apply_sale_discount($price, $product) {
    if (is_admin()) return $price; // не менять цену в админке

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

    return $price;
}

Этот код динамически снижает цену товаров с категорией "sale" на 20%. Подобный фильтр не меняет цену в базе, а только выводит изменённую цену на сайте.

Расширение: условное применение скидки по дате

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

function apply_sale_discount($price, $product) {
    if (is_admin()) return $price;

    $now = current_time('Y-m-d');
    $sale_start = '2024-07-01';
    $sale_end = '2024-07-10';

    if ($now >= $sale_start && $now <= $sale_end && has_term('sale', 'product_cat', $product->get_id())) {
        $discount = 0.20;
        $new_price = $price * (1 - $discount);
        return round($new_price, 2);
    }

    return $price;
}

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

  • Перейдите на страницу товаров из категории "sale" на фронтенде. Цены должны показываться с учетом скидки 20%.
  • В админке WooCommerce цены должны отображаться без изменений (чтобы не путать менеджеров).
  • Проверьте даты: до и после периода акции цена должна быть без скидки.
  • Откройте страницу товара, убедитесь, что цена и цена со скидкой не конфликтуют (если в товаре задана цена со скидкой — код может потребовать доработки).

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

  • Скидка не применяется: Проверьте правильность слага категории, убедитесь, что товары действительно в нужной категории.
  • Цена меняется в админке: Добавьте условие if (is_admin()) return $price; в функцию фильтра, чтобы не влиять на админ-панель.
  • Конфликт с ценами со скидкой WooCommerce: Если у товаров уже есть sale_price, фильтр может наложиться неправильно. В этом случае стоит проверять get_sale_price() и приоритет.
  • Кэширование цен: При использовании кэш-плагинов могут не обновляться цены. Очистите кэш после внесения изменений.

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

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

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

СпособПлюсыМинусыПример
Фильтр WooCommerce (php)Гибкость, динамическая цена без изменения в базеНужны навыки кода, может конфликтовать с другими скидкамиФункция выше
Правила цен WooCommerce (админка)Простота, интеграция с отчетами и купонамиМеньше гибкости, требует ручного созданияНастройка в WooCommerce > Купоны
Плагины скидок (например, Discount Rules)Удобный UI, много опцийДоп. нагрузка, возможны конфликтыDiscount Rules plugin

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

⭐⭐⭐⭐⭐
Как создать автоматический импорт пользовательских данных в WordPress
26.02.2026
WooCommerce: как избежать дублирования товаров при импорте из osCommerce
20.05.2026
Как использовать WP-Cron для автоматизации задач в WordPress: практическое руководство
26.04.2026
Как создать плагин для автоматического сохранения changelogов в WordPress
30.11.2025
Автоматическое отключение неиспользуемых плагинов в WordPress
01.02.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙