我正在根据以下参数自定义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重新计算税款。
我该怎么做?
塔克斯