WooCommerce适配需求:特定国家免VAT但本地取货需恢复征税
解决方案:选择本地取货时恢复VAT征收
下面是修改后的代码,实现了「当用户选择Local Pickup(本地取货)配送方式时,无论所属国家是否在免VAT列表中,都恢复征收VAT」的需求:
function extempt_vat_for_non_eu_firms( $post_data ) { // 默认不豁免VAT WC()->customer->set_is_vat_exempt( false ); parse_str( $post_data, $output ); $countries_without_vat = array('BA','RS','ME','MK'); // 检查是否选择了本地取货(配送方式slug通常为local_pickup,若你的实际slug不同请修改) $is_local_pickup = !empty( $output['shipping_method'] ) && strpos( $output['shipping_method'][0], 'local_pickup' ) !== false; // 仅当用户属于免VAT国家且未选择本地取货时,才豁免VAT if( in_array( $output['billing_country'], $countries_without_vat ) && !$is_local_pickup ) { WC()->customer->set_is_vat_exempt( true ); } } add_action( 'woocommerce_checkout_update_order_review', 'extempt_vat_for_non_eu_firms' );
关键说明:
- 从结账提交的
post_data中解析出shipping_method字段,判断用户是否选择了本地取货。用strpos判断是为了兼容带后缀的本地取货方式(比如local_pickup:1这类场景)。 - 调整豁免逻辑:只有同时满足「所属国家在免VAT列表」和「未选择本地取货」两个条件时,才设置VAT豁免;只要选了本地取货,无论用户来自哪个国家,都会恢复征收VAT。
内容的提问来源于stack exchange,提问作者ivan599
相关产品推荐
相关产品推荐

