WooCommerce: автоматическое изменение стоимости товаров при акциях через функции и хуки

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

В WooCommerce часто возникает задача автоматического изменения цены товара при акциях, распродажах или специальных условиях. Использование стандартного функционала со скидками не всегда удобно — например, если скидка должна применяться по сложным правилам (категории + пользовательская роль) или с динамическими формулами. В таких случаях стоит реализовать изменение цены через хуки и функции WordPress, чтобы гибко контролировать логику.

Как автоматически изменить цену товара в WooCommerce

Выбор подходящего хука для корректировки цены

Для изменения цены в WooCommerce на лету используется фильтр woocommerce_product_get_price и woocommerce_product_get_regular_price. Они позволяют модифицировать цену товара перед выводом на сайте без изменения данных в базе.

Пример функции для автоматической скидки 20% на товары из категории "Распродажа"

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

function custom_sale_price_for_category($price, $product) {
    if (has_term('rasprodazha', 'product_cat', $product->get_id())) {
        $discount = 0.8; // 20% скидка
        $new_price = $price * $discount;
        return round($new_price, 2);
    }
    return $price;
}

Этот код проверяет, принадлежит ли товар категории с ярлыком rasprodazha и применяет скидку 20%. Функция работает динамически, не изменяя цены в админке.

Пошаговое руководство по внедрению

  1. Добавьте код в functions.php вашей дочерней темы (или используйте плагин для пользовательских функций).
  2. Измените ярлык категории rasprodazha на нужный вашей акции.
  3. Очистите кэш сайта и кэш браузера.
  4. Проверьте страницу товара и страницу магазина, чтобы увидеть изменённую цену.

Как проверить, что решение сработало

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

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

  • Цена не меняется: Проверьте корректность ярлыка категории, убедитесь, что фильтр подключён правильно и что код добавлен в активную тему.
  • Цена меняется на странице товара, но не в корзине: Добавьте аналогичный фильтр на woocommerce_cart_item_price и woocommerce_cart_item_subtotal для корзины.
  • Конфликт с другими плагинами скидок: Отключите временно плагины скидок, проверьте, не перекрывают ли они цены.
  • Кэширование мешает увидеть изменения: Очистите все кэши (сайт, сервер, CDN) и попробуйте снова.

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

  • Старайтесь минимизировать сложную логику внутри фильтров цены — тяжелые запросы замедляют загрузку страниц.
  • Кэшируйте результаты вычислений, если скидки зависят от сложных условий (например, пользовательских ролей или внешних API).
  • Не изменяйте цены в базе данных напрямую для временных акций — используйте фильтры, чтобы избежать ошибок и сохранить целостность данных.

Дополнительные варианты реализации

Если скидка должна зависеть от роли пользователя, можно добавить условие:

function custom_sale_price_for_category_and_role($price, $product) {
    if (has_term('rasprodazha', 'product_cat', $product->get_id()) && current_user_can('wholesale_customer')) {
        return round($price * 0.7, 2); // 30% скидка для оптовиков
    }
    return $price;
}
add_filter('woocommerce_product_get_price', 'custom_sale_price_for_category_and_role', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_sale_price_for_category_and_role', 10, 2);

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

СпособПлюсыМинусыКогда использовать
Встроенные распродажи WooCommerceПростота, поддержка из коробкиМало гибкости, только фиксированные скидкиОбычные распродажи без условий
Плагины скидок (например, Dynamic Pricing)Богатый функционал, UI для правилНагрузка, возможны конфликты, стоимостьСложные акции, много условий
Кастомные фильтры и хуки (как в статье)Максимальный контроль, легковесностьТребует навыков разработкиУникальные условия, интеграции
Как создать автоматический каталог файлов в WordPress
08.02.2026
WooCommerce: автоматическое изменение названия товара при изменении атрибутов
11.05.2026
Как автоматически удалять пустые термины в таксономиях WordPress
12.04.2026
WooCommerce: как изменить URL товара после изменения атрибутов
07.05.2026
Как создать динамическую регистрацию пользователей в WordPress с использованием REST API
12.01.2026