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

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

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

Как автоматически менять цену товара по акции через хук woocommerce_product_get_price

Для динамического изменения цены используйте фильтр woocommerce_product_get_price, который применяется при получении цены товара. Ниже пример, как задать скидку 20% на все товары категории "Распродажа" с 1 по 7 июля 2024 года:

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

function custom_sale_price_on_promotion($price, $product) {
    // Проверяем дату акции
    $current_date = current_time('Y-m-d');
    if ($current_date < '2024-07-01' || $current_date > '2024-07-07') {
        return $price; // акция неактивна
    }

    // Проверяем, что товар в категории "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;
}

Код применяет скидку только на фронтенде и в корзине без изменения базы данных — безопасный вариант для временных акций.

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

  1. Добавьте код в файл functions.php активной дочерней темы или в свой плагин для кастомизации.
  2. Убедитесь, что категория с ярлыком sale существует и назначена товарам для акции.
  3. Настройте даты в коде под свои сроки акции.
  4. Очистите кэш сайта и браузера.
  5. Проверьте отображение цен на страницах товаров и в корзине.

Проверка результата

Проверить корректность изменения цены можно следующим образом:

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

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

  • Скидка не применяется на страницах магазина: Проверьте, что вы используете и фильтр woocommerce_product_get_regular_price вместе с woocommerce_product_get_price, иначе цена для сравнения не изменится.
  • Скидка применяется и в админке: Добавьте проверку if (is_admin()) return $price; в начале функции, чтобы избежать изменения цены в админке.
  • Кэш мешает увидеть изменения: Очистите кэш плагина и браузера, отключите кэширование на время теста.
  • Товар не в нужной категории: Проверьте slug категории и используйте функцию has_term корректно.

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

  • Не меняйте цены напрямую в базе данных, чтобы избежать конфликтов с отчетами и аналитикой.
  • Используйте кеширование внутри функции, если количество товаров велико и проверка категорий нагружает сервер:
static $sale_products = null;
if (is_null($sale_products)) {
    $sale_products = get_posts([ 'post_type' => 'product', 'numberposts' => -1, 'tax_query' => [[
        'taxonomy' => 'product_cat',
        'field' => 'slug',
        'terms' => 'sale',
    ]], 'fields' => 'ids' ]);
}
if (in_array($product->get_id(), $sale_products)) {
    // применяем скидку
}
  • Всегда проверяйте даты через current_time('Y-m-d') для корректной работы по часовому поясу WordPress.
  • Для более сложных условий используйте дополнительные метаданные товара и хук woocommerce_before_calculate_totals для изменения цены в корзине.

Сравнение подходов: код vs плагины для акций WooCommerce

МетодПлюсыМинусыКомпромисс
Код (фильтры цен)Гибкость, не нагружает базу, бесплатныйТребует навыков, возможные ошибки при неправильном кодеИспользовать вместе с тестированием на staging
Плагины скидок (например, WooCommerce Dynamic Pricing)Простой интерфейс, поддержка сложных правилДополнительная нагрузка, платные версииИспользовать, если нужно быстро и с поддержкой
Как добавить собственные метаданные к записям WordPress
21.11.2025
Как отключить скрипт comment-reply.js в WordPress для ускорения загрузки сайта
11.12.2025
Как сделать точное управление ролями в WordPress с примерами
22.12.2025
Как автоматически отправлять email-сообщения в WooCommerce при изменении статуса заказа
09.04.2026
Как создать и использовать шорткоды в WordPress
31.10.2025

Совсем скоро здесь заработает сайт о вордпресс. И будет он связан с продажами, магазинами или чем-то таким.