Как использовать хуки для изменения отображения цен в WooCommerce

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

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

Основные хуки для изменения отображения цен в WooCommerce

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

  • woocommerce_get_price_html — фильтр для изменения HTML вывода цены.
  • woocommerce_before_calculate_totals — действие для изменения цены в корзине перед подсчетом.
  • woocommerce_cart_item_price — фильтр для изменения цены товара в корзине.

В этой статье сосредоточимся на фильтре woocommerce_get_price_html для изменения вывода цены на странице товара и в каталоге.

Пошаговое решение: добавление текста «Цена по акции» перед ценой товаров со скидкой

Задача — добавить перед ценой товара текст «Цена по акции:», если на товар установлена скидка.

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

add_filter('woocommerce_get_price_html', 'custom_sale_price_prefix', 10, 2);
function custom_sale_price_prefix($price_html, $product) {
    if ($product->is_on_sale()) {
        $price_html = '<span class="sale-prefix">Цена по акции: </span>' . $price_html;
    }
    return $price_html;
}

Этот код проверяет, есть ли скидка у товара ($product->is_on_sale()), и добавляет префикс к цене.

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

  1. Перейдите на страницу товара, на который установлена скидка.
  2. Проверьте, что перед ценой появился текст «Цена по акции:».
  3. Если используется кэширование, очистите кэш и обновите страницу.
  4. Для товаров без скидки префикс не должен отображаться.

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

  • Префикс появляется на всех товарах, включая без скидки: Проверьте, что проверка $product->is_on_sale() корректна и объект $product — это экземпляр WC_Product. Если фильтр вызывается в нестандартном контексте, объект может быть другим.
  • Код не работает — цена не меняется: Убедитесь, что ваш код не конфликтует с другими плагинами, которые тоже меняют цену. Попробуйте увеличить приоритет фильтра, например, на 20.
  • HTML выводится некорректно: Проверьте, что используете правильные кавычки и экранируете HTML, если необходимо. В нашем случае добавление <span> безопасно.

Расширенный пример: добавление кастомного текста после цены для всех товаров в каталоге

add_filter('woocommerce_get_price_html', 'add_custom_text_after_price', 15, 2);
function add_custom_text_after_price($price_html, $product) {
    // Добавим текст только в архиве товаров
    if (is_shop() || is_product_category()) {
        $price_html .= ' <small>— доставка бесплатно</small>';
    }
    return $price_html;
}

Этот код добавит подвал с информацией о бесплатной доставке после цены на страницах магазина и категорий.

Чек-лист для успешного изменения отображения цен через хуки

  • Проверить, что фильтр подключен через add_filter с правильным приоритетом.
  • Убедиться, что объект $product валиден и поддерживает методы WooCommerce.
  • Тестировать изменения на разных типах товаров (простые, вариативные, со скидкой).
  • Проверить совместимость с кэш-плагинами и очистить кэш после изменений.
  • Использовать дочернюю тему или кастомный плагин, чтобы не потерять изменения при обновлении WooCommerce.

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

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

Таблица сравнения способов изменения отображения цен в WooCommerce

СпособПлюсыМинусыПример использования
Фильтр woocommerce_get_price_htmlЛегко изменить вывод HTML цены без правки шаблоновНе меняет реальные цены в корзинеДобавление текста "Цена по акции:"
Хук woocommerce_before_calculate_totalsИзменяет цену товара в корзине и заказеСложнее в реализации, может влиять на расчетыДинамическая скидка по условию
Правка шаблонов в темеПолный контроль над выводомСложнее обновлять, риск потери изменений при апдейтеПолная кастомизация дизайна цены
Как использовать метод AJAX в WooCommerce для обновления корзины без перезагрузки
05.05.2026
Автоматическое изменение цен в WooCommerce по расписанию
28.04.2026
Автоматическое удаление старого контента в WordPress
13.04.2026
Автоматизация создания и удаления черновиков в WordPress
24.03.2026
Автоматическое удаление товаров из WooCommerce при нулевом остатке
25.04.2026