Получайте налоговую ставку отдельно для каждой корзины и заказывайте товары в Woocommerce
Я хотел бы изменить отображение корзины (а затем и счет-фактуру), чтобы в другом столбце отображался налог и налоговая ставка для каждого продукта. Я не нашел функцию или получатель для ставки налога в виде числа, только имя, с $_product->get_tax_class(). Я искал такую функцию, как $_product->get_tax_rate(), но не нашел ни одной. Поэтому я написал ужасный обходной путь в woocommerce/templates/cart/cart.php.
После легкой части добавления
<th class="product-tax"><?php esc_html_e( 'Tax', 'woocommerce' ); ?></th>
в строке 35 я добавил из строки 121:
$tax_name = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
if ($tax_name == "reduced-tax-rate") $tax_rate= 7; else $tax_rate= 19;
$with_tax = $_product->get_price( $_product );
$without_tax = $with_tax/((100+$tax_rate)/100);
$tax = $with_tax-$without_tax;
$tax = $tax*$cart_item['quantity'];
$tax = number_format($tax, 2, '.', '')." €";
echo " ".$tax." (".$tax_rate."%)";
Пока это работает, но только в Германии, и, конечно, она не будет существовать очень долго. Итак, что является лучшим способом сделать это?
Спасибо!
ОБНОВИТЬ
Только что нашел половину решения:
$tax_name = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
if ($tax_name == "reduced-tax-rate") $tax_rate= 7; else $tax_rate= 19;
echo " ".$cart_item['line_subtotal_tax']." (".$tax_rate."%)";
$ cart_item ['line_subtotal_tax'] содержит значение, которое я пытался получить расчетным путем. Теперь только имя отсутствует..."19%" или "7%"...
1 ответ
Я предполагаю, что woocommerce_cart_item_tax
это пользовательский крючок, как я не нашел его...
Налоги зависят от ваших настроек, которые являются одним или несколькими классами налогов и для каждого класса налогов:
- все страны и / или по странам
- все штаты страны или / и штатом
- все почтовые индексы страны и / или по почтовому индексу
- одна или несколько налоговых ставок.
- (и другие настройки)
Теперь, чтобы правильно обрабатывать налоги, вы будете использовать WC_Tax
Класс объекта и все связанные методы. Мы будем использовать только налоговые ставки по стране:
// Getting an instance of the WC_Tax object
$wc_tax = new WC_Tax();
// Get User billing country
$billing_country = WC()->customer->get_billing_country();
// Get the item tax class (your code)
$tax_class = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
// Get the related Data for Germany and "default" tax class
$tax_data = $tax->find_rates( array('country' => $billing_country, tax_class' => $tax_class ) );
// The rate (percentage number)
$tax_rate = $tax_data['rate'];
Проверено и работает.
Для заказов (счет в формате PDF) это должно быть что-то очень похожее, где вам нужно будет заменить эту строку:
// Get the item tax class (your code)
$tax_class = apply_filters( 'woocommerce_cart_item_tax', $_product->get_tax_class(), $cart_item, $cart_item_key );
чем-то вроде (где $item
это пример WC_Order_Item_Product
объект):
// Get the WC_Product Object instance
$_product = $item->get_product();
// Get the item tax class
$tax_class = $_product->get_tax_class();