Что такое хук 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 могут сломать шаблон, сложнее поддерживать |