Получайте налоговую ставку отдельно для каждой корзины и заказывайте товары в 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();
Другие вопросы по тегам