如何让WooCommerce PHP全局附加费包含VAT(不额外计征增值税)
解决方案:让WooCommerce全局附加费包含VAT
我来帮你搞定这个问题!你现在遇到的核心问题是:设置的15元附加费被系统额外计征VAT,导致最终费用超过预期。要实现「输入金额即为含税最终费用」的效果,我们需要调整代码逻辑,先反算出不含税的基础金额,再让系统基于这个基数计税,最终总费用就会等于你想要的含税金额。
修改后的完整代码如下:
// 全局特殊配送服务费(已含VAT) add_action( 'woocommerce_cart_calculate_fees','wc_add_tax_inclusive_surcharge' ); function wc_add_tax_inclusive_surcharge() { // 后台环境且非AJAX请求时不执行 if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // ******** 这里设置你想要的含税最终费用 ******** $tax_inclusive_fee = 15; // 获取站点默认增值税率(自动读取WooCommerce设置的税率,如需固定税率可直接写死,比如0.2代表20%) $tax_rates = WC_Tax::get_rates(); if ( ! empty($tax_rates) ) { $tax_rate = reset($tax_rates)['rate'] / 100; } else { // fallback:如果没找到税率,默认用20%(可根据你的需求修改) $tax_rate = 0.2; } // 反算不含税的基础金额 $tax_exclusive_fee = $tax_inclusive_fee / (1 + $tax_rate); // 添加附加费:标记为应税,使用默认税类 WC()->cart->add_fee( __('特殊配送服务费', 'woocommerce'), $tax_exclusive_fee, true, '' ); }
关键逻辑解释:
- 税率获取:代码会自动读取你在WooCommerce后台设置的默认增值税率,如果有多个税率组,会取第一个生效的税率;如果需要固定某个税率,直接把
$tax_rate改成固定值即可(比如$tax_rate = 0.19;代表19%税率)。 - 不含税金额计算:用含税金额除以
(1+税率),得到不含税的基础数。比如15元含税、税率20%的话,不含税金额就是15/(1+0.2)=12.5元,系统会自动计算12.5×20%=2.5元的VAT,最终总费用12.5+2.5=15元,正好符合你的预期。 add_fee参数:第三个参数true表示该费用需要计税,第四个参数留空使用默认税类,确保税率计算和商品保持一致。
验证方式:
添加任意商品到购物车,查看购物车页面的费用明细,你会看到「特殊配送服务费」的不含税金额+对应VAT,最终合计正好等于你设置的含税金额。
内容的提问来源于stack exchange,提问作者eMikkelsen
相关产品推荐
相关产品推荐

