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

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

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

Типичные симптомы:

  • Нет возможности показать скидочную цену в каталоге без ручного применения купона
  • Сложные правила скидок требуют кастомного программного решения
  • Нужна автоматическая замена цены товара на странице без влияния на базовую цену в административной панели

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

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

Пример кода для functions.php вашей темы или в виде небольшого плагина:

add_filter('woocommerce_get_price', 'custom_woocommerce_sale_price', 10, 2);
function custom_woocommerce_sale_price($price, $product) {
    // Проверяем, что это товар и он в категории 'sale-products'
    if (is_admin()) return $price; // не менять цену в админке

    if ($product->is_type('simple') && has_term('sale-products', 'product_cat', $product->get_id())) {
        $discount_percentage = 20; // скидка 20%
        $new_price = $price * (1 - $discount_percentage / 100);
        return round($new_price, 2);
    }
    return $price;
}

Объяснение:

  • Фильтр срабатывает при выводе цены
  • Проверяем, что товар относится к категории sale-products (создайте такую категорию и добавьте туда товары)
  • Применяем скидку в 20%
  • Возвращаем новую цену, округлённую до 2 знаков после запятой

Как расширить логику

Можно добавить дополнительные условия — дату акции, пользовательские роли, количество в корзине и т.д. Например, ограничить акцию по дате:

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

    $now = current_time('timestamp');
    $sale_start = strtotime('2024-07-01 00:00:00');
    $sale_end = strtotime('2024-07-07 23:59:59');

    if ($product->is_type('simple') && has_term('sale-products', 'product_cat', $product->get_id())
        && $now >= $sale_start && $now <= $sale_end) {
        $discount_percentage = 20;
        $new_price = $price * (1 - $discount_percentage / 100);
        return round($new_price, 2);
    }
    return $price;
}

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

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

  1. Добавьте товар в категорию sale-products
  2. Откройте страницу товара на сайте (не в админке)
  3. Проверьте, что цена отображается с учётом скидки (уменьшена на 20%)
  4. Для проверки даты акции измените время на сервере или скорректируйте условия в коде
  5. Убедитесь, что цена в админке товара не изменилась

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

  • Цена не меняется на фронтенде
    Проверьте, что фильтр подключён и не выключен другими плагинами. Для отладки вставьте error_log() в функцию и смотрите логи.
  • Изменяется цена в админке
    Нужно добавить проверку is_admin(), чтобы не менять цену в панели управления.
  • Скидка применяется ко всем товарам
    Убедитесь, что условие has_term() правильно указывает категорию.
  • Конфликт с другими плагинами скидок
    Проверьте, нет ли плагинов, которые тоже фильтруют цены, и отключите их для теста.

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

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

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

МетодОписаниеПреимуществаНедостатки
Стандартные купоны Ручное применение скидок покупателем Простота, стандартный функционал Не автоматично, пользователь должен вводить код
Встроенные акции WooCommerce Установка цены продажи в админке Отображается в каталоге, простота Нельзя динамически менять цену по сложным условиям
Код с фильтром woocommerce_get_price Динамическая замена цены на фронтенде Гибкость, автоматизация, без изменения базы Требует навыков программирования, возможны конфликты
WooCommerce: автоматическое изменение цены товара при применении купона
08.06.2026
Как добавить динамические атрибуты alt к картинкам в WordPress для SEO и доступности
11.03.2026
Как настроить безопасность WordPress с помощью плагинов
18.11.2025
Как создать динамический фильтр по метаданным в WordPress
22.03.2026
Как автоматически отключать плагины в WordPress по расписанию
13.01.2026