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

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

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

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

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

Пошаговое решение: создание кастомного механизма изменения цен товаров

1. Создание функции для изменения цены товара перед отображением

WooCommerce использует фильтр woocommerce_get_price для изменения цены товара. С помощью этого фильтра можно динамически менять цену без изменения данных в базе.

add_filter('woocommerce_get_price', 'custom_dynamic_price_adjustment', 10, 2); function custom_dynamic_price_adjustment($price, $product) {    // Проверяем, что товар доступен    if (!$product->is_type('simple')) {        return $price;    }    // Получаем ID товара    $product_id = $product->get_id();    // Пример условия: скидка 20% на товары категории "sale"    if (has_term('sale', 'product_cat', $product_id)) {        $price = $price * 0.8; // применяем скидку 20%    }    return $price;}

2. Добавление условия по дате акции

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

function custom_dynamic_price_adjustment($price, $product) {    $product_id = $product->get_id();    $today = current_time('Y-m-d');    $sale_start = '2024-07-01';    $sale_end = '2024-07-10';    if (has_term('sale', 'product_cat', $product_id) && $today >= $sale_start && $today <= $sale_end) {        $price = $price * 0.8;    }    return $price;}

3. Обработка вариативных товаров

Для вариативных товаров нужно использовать фильтр woocommerce_get_variation_price:

add_filter('woocommerce_get_variation_price', 'custom_dynamic_variation_price_adjustment', 10, 2); function custom_dynamic_variation_price_adjustment($price, $variation) {    $product_id = $variation->get_id();    $today = current_time('Y-m-d');    $sale_start = '2024-07-01';    $sale_end = '2024-07-10';    if (has_term('sale', 'product_cat', $product_id) && $today >= $sale_start && $today <= $sale_end) {        $price = $price * 0.8;    }    return $price;}

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

Чтобы проверить, что скидки применились:

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

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

  • Скидка не применяется: убедитесь, что категория "sale" правильно назначена товарам и регистрируется в таксономии product_cat.
  • Дата акции не срабатывает корректно: проверьте, что формат даты совпадает с форматом Y-m-d и серверное время совпадает с вашим часовым поясом WordPress.
  • Не работает для вариаций: используйте правильный фильтр и проверяйте ID вариации, а не родительского товара.
  • Цена меняется в админке: фильтр изменяет цену только для фронтенда, если нужна модификация в админке — используйте дополнительные хуки.

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

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

Сравнение вариантов решения

МетодПлюсыМинусыПрименимость
Плагин для скидок (например, WooCommerce Dynamic Pricing)Простота настройки, множество готовых условийЗависимость от стороннего кода, нагрузкаДля магазинов без навыков кодирования
Кастомный код с хуками WooCommerceГибкость, отсутствие сторонних зависимостей, меньше нагрузкиТребует навыков PHP и понимания WooCommerceДля разработчиков и технически подкованных пользователей
Ручное изменение цен в админкеПростота, не требует навыковЗатратно по времени, риск ошибокМагазины с небольшим каталогом
WooCommerce: автоматический возврат денег при отмене заказа
16.06.2026
Как создать динамические табличные каталоги в WordPress с помощью шорткода
17.04.2026
Как создать динамические виджеты WordPress с помощью кода
09.04.2026
Добавление кастомных полей в WooCommerce без плагинов
19.01.2026
Как автоматизировать удаление неактивных пользователей в WordPress
28.03.2026