Формат цен и налоги
Цена в базе — просто число: 9.9. Покупателю её показывают с символом валюты, нужными разделителями и, если включены налоги, с налогом или без. Для всего этого есть готовые функции — собирать строку цены вручную не нужно.
Форматирование
// wp-content/plugins/acme-shop/includes/storefront.php
add_action('woocommerce_single_product_summary', function () {
global $product;
$perMonth = (float) $product->get_price() / 4;
echo '<p>Или четыре платежа по ' . wc_price($perMonth) . '</p>';
}, 11);Функция wc_price() превращает число в HTML с валютой: для кружки за 9,90 € под ценой появится строка «Или четыре платежа по 2,48 €». Символ, его положение, разделители и число знаков берутся из «WooCommerce → Настройки → Основные», блок «Параметры валюты».
Функции цен
| Функция | Что возвращает |
|---|---|
wc_price(9.9) | HTML цены с валютой магазина |
wc_price(9.9, ['currency' => 'USD']) | То же в другой валюте |
get_woocommerce_currency() | Код валюты: EUR |
get_woocommerce_currency_symbol() | Символ: € |
wc_get_price_decimals() | Число знаков после запятой |
wc_format_decimal(9.9, 2) | Число с двумя знаками для хранения: 9.90 |
wc_price() возвращает HTML с тегами — для письма без разметки или файла выгрузки его оборачивают в wp_strip_all_tags().
Включение налогов
Налоги выключены, пока не отмечено «Включить налоговые ставки и расчёты» в «WooCommerce → Настройки → Основные». После этого появляется вкладка «Налог» с тремя главными параметрами:
| Параметр | Что задаёт |
|---|---|
| Цены вводятся с налогом или без | Как понимать цену в редакторе товара |
| Отображение цен в магазине | С налогом или без на витрине |
| Стандартные ставки | Таблица: страна, ставка в процентах, название |
Добавьте в «Стандартные ставки» строку со страной DE и ставкой 19 — и у товаров появится налог.
Цена с налогом и без
// wp-content/plugins/acme-shop/includes/storefront.php
add_action('woocommerce_single_product_summary', function () {
global $product;
if (!wc_tax_enabled()) {
return;
}
printf(
'<p>Без налога: %s, с налогом: %s</p>',
wc_price(wc_get_price_excluding_tax($product)),
wc_price(wc_get_price_including_tax($product))
);
}, 12);Обе функции принимают товар и считают цену по настройкам налогов. Если цены введены без налога и ставка равна 19 %, для кружки выйдет «Без налога: 9,90 €, с налогом: 11,78 €».
Вторым аргументом передают количество и свою цену: wc_get_price_including_tax($product, ['qty' => 3, 'price' => 8.5]).
Цена для показа
$price = wc_get_price_to_display($product);Функция сама выбирает вариант с налогом или без — тот, что задан в настройке «Отображение цен в магазине». Её используют везде, где цена выводится рядом со стандартной ценой товара.
Налог товара
| Метод товара | Что возвращает |
|---|---|
get_tax_status() | taxable, shipping или none |
get_tax_class() | Налоговый класс, пустая строка — стандартный |
Налоговый класс — отдельная таблица ставок, например пониженная для книг. Классы добавляют на вкладке «Налог», а товару назначают в редакторе, поле «Налоговый класс».
Частая ошибка
Цену собирают руками: $product->get_price() . ' €'. При смене валюты или формата в настройках такие строки остаются старыми, а с налогами показывают не ту сумму, что в корзине. Число — через wc_get_price_to_display(), строку — через wc_price().