WooCommerce: автоматическое изменение цен по акциям с помощью кода

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

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

Чаще всего пользователи хотят реализовать такие сценарии:

  • Скидка на определённые категории товаров в заданный период.
  • Динамическое изменение цены по формуле (например, наценка или скидка в процентах).
  • Автоматическое включение/отключение акций по расписанию.

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

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

В WooCommerce для динамического изменения цены товара можно использовать фильтр woocommerce_product_get_price и woocommerce_product_get_regular_price. Они позволяют перехватывать запрос цены и менять её на лету.

Шаг 2. Пример кода для скидки 20% на категорию товаров с ID 15

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

function apply_dynamic_discount($price, $product) {
    if (is_admin()) return $price; // Чтобы не мешать админке

    // Проверяем, есть ли у товара категория с ID 15
    if (has_term(15, 'product_cat', $product->get_id())) {
        $discount_percentage = 20; // Скидка 20%
        $new_price = $price * (1 - $discount_percentage / 100);
        return round($new_price, 2);
    }

    return $price;
}

Шаг 3. Добавление проверки периода действия акции

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

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

    $start_date = '2024-07-01';
    $end_date = '2024-07-10';
    $today = date('Y-m-d');

    if ($today >= $start_date && $today <= $end_date) {
        if (has_term(15, 'product_cat', $product->get_id())) {
            $discount_percentage = 20;
            $new_price = $price * (1 - $discount_percentage / 100);
            return round($new_price, 2);
        }
    }

    return $price;
}

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

  • Очистите кэш сайта и браузера.
  • Перейдите на страницу товара из категории с ID 15 (можно узнать через админку или SQL-запрос).
  • Убедитесь, что цена товара изменилась на 20% меньше в установленный период.
  • Проверьте, что в админке цены остались без изменений — динамическая скидка применяется только на фронтенде.
  • Проверьте работу на нескольких товарах и вне периода, скидка должна пропадать.

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

  • Скидка не применяется: проверьте, правильно ли указан ID категории и есть ли у товара эта категория. Используйте var_dump(has_term(15, 'product_cat', $product->get_id())) для отладки.
  • Цена в админке меняется: обязательно добавляйте условие if (is_admin()) return $price; чтобы не ломать админку WooCommerce.
  • Цена меняется для всех товаров: убедитесь, что условие has_term() корректно проверяет категории.
  • Формат цены неправильный: используйте round($new_price, 2) для корректного округления до копеек.
  • Кэш мешает видеть изменения: отключите кеширование или очистите кэш после внесения изменений.

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

  • Не добавляйте тяжелые SQL-запросы или сложные вычисления в фильтр цены, это может замедлить загрузку страниц.
  • Используйте transient API для кеширования результатов, если логика сложная и требует внешних запросов.
  • Избегайте изменения цены в админке — это может привести к ошибкам при сохранении заказа.
  • Для более сложных акций рассмотрите готовые решения, например, плагин Clearfy Pro с расширенными возможностями SEO и оптимизации на https://wpshop.ru/plugins/clearfy.

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

МетодПлюсыМинусыПрименение
Фильтр woocommerce_product_get_price в кодеГибко, бесплатно, быстро менять цены на фронтеТребует знаний PHP, нет визуального интерфейсаНебольшие акции, индивидуальные условия
Плагины акций и скидокУдобный интерфейс, много функцийДополнительная нагрузка, платные версииСложные маркетинговые акции, массовые скидки
Редактирование цен вручнуюПростотаНеэффективно при большом количестве товаровМаленький магазин, единичные скидки
Как автоматизировать удаление старых оставленных комментариев в WordPress
12.04.2026
WooCommerce: как добавить подтверждение по телефону при оформлении заказа
25.07.2026
Как динамически изменить заголовок страницы в WordPress: практические методы и примеры
24.03.2026
Как добавить свое шорткод в WordPress: подробное руководство
15.11.2025
Как автоматизировать управление пользователями WordPress с помощью кода
08.02.2026
×
Сделай свой сайт крутым!

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

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