WooCommerce: как исключить товар из распродажи без плагинов

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

В магазине на WooCommerce иногда возникает задача — оставить скидки только на часть каталога, а некоторые товары не должны попадать под распродажу, даже если глобальная скидка установлена.

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

Шаги решения: фильтрация распродаж через код

1. Использование хука woocommerce_get_sale_price для отключения скидки

Хук woocommerce_get_sale_price применяется для получения цены со скидкой. Можно на лету вернуть false для определённых товаров, чтобы они не считались распроданными.

add_filter('woocommerce_get_sale_price', 'exclude_product_from_sale_price', 10, 2);
function exclude_product_from_sale_price($sale_price, $product) {
    // Массив ID товаров для исключения из распродажи
    $excluded_ids = array(123, 456, 789);

    if (in_array($product->get_id(), $excluded_ids)) {
        return false; // Отключаем скидку
    }
    return $sale_price;
}

2. Аналогично, исключаем товар из отображения на странице магазина

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

add_filter('woocommerce_get_price_html', 'show_regular_price_for_excluded_products', 10, 2);
function show_regular_price_for_excluded_products($price_html, $product) {
    $excluded_ids = array(123, 456, 789);

    if (in_array($product->get_id(), $excluded_ids)) {
        $regular_price = wc_price($product->get_regular_price());
        return $regular_price; // Показываем обычную цену
    }
    return $price_html;
}

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

1. Очистите кэш сайта и браузера.

2. Перейдите на страницу товара из списка исключённых (ID 123, 456, 789 в примере).

3. Убедитесь, что на странице товара и в каталоге отображается только обычная цена без скидки.

4. Проверьте, что остальные товары с распродажей показывают корректную цену со скидкой.

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

  • Кэширование цен. Если используется кэширование (например, плагин кэширования или серверный кеш), обновления цен могут не отображаться сразу. Очистите кэш или временно отключите кэширование при тестах.
  • Использование неправильных ID товаров. Проверьте, что в массиве $excluded_ids действительно указаны правильные ID товаров. Их можно узнать в админке WordPress в списке товаров.
  • Конфликты с другими плагинами. Некоторые плагины для скидок могут переопределять цены после наших фильтров. В этом случае нужно изучить их документацию и возможно использовать другие хуки.

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

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

Сравнение подходов: плагин vs кастомный код

МетодПреимуществаНедостатки
Плагин (например, WooCommerce Dynamic Pricing)Готовые настройки, удобный интерфейс, поддержка скидок разного типаМожет быть тяжёлым, не всегда гибким для точечных исключений, дополнительные расходы
Кастомный код (фильтры и хуки)Лёгкий, гибкий, без дополнительных плагинов, точечное решениеТребует базовых знаний PHP, возможны конфликты с другими плагинами, нужно поддерживать самостоятельно
WooCommerce: как автоматически удалять неактивные заказы
02.10.2026
Как отключить лишние emoji, Gutenberg-скрипты и встроенные стили в WordPress
31.08.2026
Как создать свой плагин WordPress: пошаговое руководство
28.09.2026
Как изменить текст, выводимый в meta description WordPress без плагинов
28.09.2026
WooCommerce: как быстро использовать хуки для добавления контента на страницы товара
27.08.2026