WooCommerce按产品类型取消征税

时间:2017-02-07 作者:Joshua Wieczorek

我正在根据以下参数自定义Woocommerce安装。

该网站销售贵金属以及其他类型的物品。如果贵金属销售总额至少为500美元,则企业所在州不征收贵金属税。

所有其他物品以及500美元以下的金属销售仍需征税。

(网站可以以20美元的价格出售1枚银币,但需要纳税,但如果有人以20美元的价格购买25枚银币,则不会对这些银币征税。)

此外,我还为批量定价编写了一些代码,虽然效果很好,但与减税有点关联。

我遇到的问题是,当我从项目中删除税款时,购物车似乎不会重新计算税款。

这是我的代码:

这个功能对于我的批量定价功能和决定是否取消税收非常有用。

add_action(\'woocommerce_before_calculate_totals\', \'woo_edit_product_price_at_cart\');

function woo_edit_product_price_at_cart($cart)
{
   $cart_totals = [];

   foreach($cart->cart_contents as $item):

   if(\'metal\'===get_post_meta($item[\'product_id\'], \'_product_type\', 1)):               
       array_push($cart_totals, $item[\'line_total\']);            
       $item[\'data\']->price = agspp_get_price_in_range($item[\'quantity\'], get_post_meta($item[\'product_id\'], \'_bulk_pricing\', 1));
       endif;
    endforeach;            

    if(array_sum($cart_totals) >= 500):
       $_SESSION[\'_agspp_remove_tax\'] = true;
       return;
   endif;

   $_SESSION[\'_agspp_remove_tax\'] = false;        
}
然而,真正试图取消税收的问题在于:

add_action(\'woocommerce_calculate_totals\', \'woo_remove_item_tax\',9999);
function woo_remove_item_tax($cart)
{
if(!isset($_SESSION[\'_agspp_remove_tax\']) ||   !$_SESSION[\'_agspp_remove_tax\']):
       return;
   endif;

   foreach($cart->cart_contents as $item):

       if(\'metal\'===get_post_meta($item[\'product_id\'], \'_product_type\', 1)):
           $item[\'line_tax\'] = 0;
           $item[\'line_subtotal_tax\'] = 0;
           $item[\'line_tax_data\'] = [];

       endif;            

   endforeach;
}
该函数实际上从item对象中删除税款,但是,似乎无法让cart重新计算税款。

我该怎么做?

塔克斯

1 个回复
SO网友:Joshua Wieczorek

在经历了许多麻烦、尝试和错误之后,我没有重新计算税收,而是改变了税收。

我将第二个函数中的foreach循环更改为:

if(\'metal\'===get_post_meta($item[\'product_id\'], \'_product_type\', 1)):               
    $cart->taxes[1] -= $item[\'line_tax\'];
    $cart->tax_total -= $item[\'line_tax\'];
    $item[\'line_tax\'] = 0;
    $item[\'line_subtotal_tax\'] = 0;
    $item[\'line_tax_data\'] = [];
    $cart->cart_contents[$key] = $item;
endif; 
现在我也需要它了。哎呀!!!

相关推荐