Автоматическое изменение стоимости товаров WooCommerce через хуки

Диагностика задачи: зачем автоматизировать изменение цен в WooCommerce

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

Какие хуки WooCommerce отвечают за цену товара

Цена товара в WooCommerce хранится в метаполях _price, _regular_price и _sale_price. Для динамической корректировки цены при отображении на сайте используют фильтры:

  • woocommerce_product_get_price — цена для расчётов и отображения
  • woocommerce_product_get_regular_price — базовая цена товара
  • woocommerce_product_get_sale_price — цена со скидкой

Изменения через эти фильтры не меняют данные в базе, а влияют только на вывод и расчёты.

Пошаговое решение: как автоматически изменить цену товара через хук

Пример: увеличить цену на 10% для всех товаров категории "Акционные"

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_dynamic_price', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'custom_dynamic_price', 10, 2);

function custom_dynamic_price($price, $product) {
    if (has_term('aktsionnye', 'product_cat', $product->get_id())) {
        $price = $price * 1.10; // увеличиваем на 10%
    }
    return $price;
}

Объяснение кода

  • Подключаемся к трём фильтрам, чтобы цена менялась во всех местах
  • Проверяем, принадлежит ли товар категории с ярлыком aktsionnye
  • Если да, умножаем цену на 1.1

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

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

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

  • Хук срабатывает не для всех типов цен. Нужно подключить фильтры для всех трёх типов: get_price, get_regular_price, get_sale_price.
  • Цена возвращается строкой, а не числом. Следите, чтобы возвращаемое значение было числом с плавающей точкой для корректных вычислений.
  • Кэширование мешает обновлению цены. Очистите кэш WooCommerce и плагинов кэширования после внесения изменений.
  • Использование хуков без проверки категории. Это может привести к изменению цен у всех товаров.

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

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

Сравнение вариантов реализации изменения цены

СпособПлюсыМинусы
Фильтры WooCommerce (как в примере)Динамическая цена без изменения базы, простота реализацииЦена меняется только при выводе, не подходит для учета в бэкенде
Обновление цены через cron и wp_update_post_metaМеняет цену в базе, видно в админкеНагрузка на базу, сложнее поддерживать
Плагины динамического ценообразованияГотовое решение с интерфейсомМожет быть дорого, избыточно для простых задач
Как избежать проблем с отображением корзины в WooCommerce при использовании кэширования
22.04.2026
Автоматическая оптимизация медиа в WordPress при загрузке
05.04.2026
Изменение имени пользователя в WordPress без плагинов
08.12.2025
Как автоматически отключать неиспользуемые плагины в WordPress
10.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress
04.12.2025