Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Формат цен и налоги

Цена в базе — просто число: 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().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.