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

Что такое хук woocommerce_get_price_html и зачем он нужен

В WooCommerce цена товара выводится с помощью функции, которая в итоге генерирует HTML для отображения цены. Фильтр woocommerce_get_price_html позволяет перехватить этот HTML и изменить его по своему усмотрению без изменения исходного кода плагина. Это особенно полезно для добавления дополнительной информации к цене или изменения формата отображения в зависимости от условий.

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

Частая задача — добавить к цене текст, например "Цена указана без учета скидки" или вывести цену в другой валюте рядом с основной. Без кастомизации приходится редактировать шаблоны или использовать громоздкие решения. Если стандартный вид цены не соответствует дизайну или бизнес-логике, фильтр woocommerce_get_price_html — оптимальное решение.

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

1. Откройте файл functions.php вашей дочерней темы или создайте плагин для кастомных функций.

2. Добавьте следующий код для изменения вывода цены:

add_filter('woocommerce_get_price_html', 'custom_price_html', 10, 2);
function custom_price_html($price, $product) {
    if ( ! is_admin() ) {
        // Добавим текст "* Цена указана без учета скидки"
        $price .= ' <small style="color:#999">* Цена указана без учета скидки</small>';
    }
    return $price;
}

3. Если нужно вывести цену в другой валюте рядом с основной, можно получить цену и конвертировать, например:

add_filter('woocommerce_get_price_html', 'price_with_converted_currency', 10, 2);
function price_with_converted_currency($price, $product) {
    if ( ! is_admin() ) {
        $usd_rate = 0.015; // пример курса рубля к доллару
        $regular_price = $product->get_regular_price();
        if ($regular_price) {
            $converted = $regular_price * $usd_rate;
            $price .= sprintf(' — <small style="color:#666">~ $%.2f USD</small>', $converted);
        }
    }
    return $price;
}

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

1. Зайдите на страницу товара на фронтенде сайта.

2. Убедитесь, что к цене добавился нужный текст или дополнительная информация.

3. Проверьте разные товары, включая вариативные, чтобы убедиться, что фильтр не ломает отображение.

4. Для проверки в консоли разработчика (DevTools) проверьте, что изменённый HTML цены присутствует.

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

  • Ошибка: Изменения видны в админке — исправление: добавьте проверку if ( ! is_admin() ), чтобы фильтр работал только на фронтенде.
  • Ошибка: Цена не отображается для вариативных товаров — причина: для вариативных товаров может использоваться другой фильтр. Решение: дополнительно использовать фильтр woocommerce_variable_sale_price_html и woocommerce_variable_price_html.
  • Ошибка: Изменения ломают стили — исправление: используйте минимальные стили, избегайте громоздких inline-стилей, лучше подключайте CSS в теме.
  • Ошибка: Не учитывается валюта — решение: используйте методы WooCommerce для получения цены с учётом валюты, например, wc_price().

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

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

Сравнение способов кастомизации цены: фильтр vs переопределение шаблонов

МетодПлюсыМинусы
Фильтр woocommerce_get_price_htmlПростота, не требует копирования шаблонов, гибкостьОграничен изменением HTML цены, требует внимания к условиям
Переопределение шаблонов WooCommerceПолный контроль над разметкой, можно менять структуруОбновления WooCommerce могут сломать шаблон, сложнее поддерживать
Как создать эффективный отчет по производительности WordPress
15.04.2026
WooCommerce: как автоматически удалять неиспользуемые вариации товаров через код
30.05.2026
Как создать своё виджет в WordPress с примером кода
07.01.2026
Как создать свой плагин для WordPress с настройками
19.11.2025
WooCommerce: как удалить все вариации товара из базы через код
15.06.2026