如何让WooCommerce发票打印插件显示0税率税行?
解决WooCommerce Print Invoices & Packing Lists显示0税率税行的问题
我之前处理过一模一样的场景,刚好能给你几个靠谱的解决思路。你已经通过add_filter( 'woocommerce_cart_hide_zero_taxes', '__return_false' );搞定了购物车和结账页的显示,但这款发票插件有自己独立的税项渲染逻辑,得单独适配:
方案1:强制插件返回所有税项(含0税率)
这个插件提供了wc_pip_order_taxes过滤器,我们可以用它来覆盖默认的税项筛选规则,强制保留0税率的税行。把下面的代码添加到主题functions.php或者自定义功能插件里:
add_filter( 'wc_pip_order_taxes', 'force_show_zero_taxes_in_invoices', 10, 2 ); function force_show_zero_taxes_in_invoices( $taxes, $order ) { // 获取订单全部税项,不排除0金额的条目 $all_taxes = $order->get_taxes( array( 'order' => 'asc' ) ); // 过滤出有税名的项(即使金额为0) $taxes = array_filter( $all_taxes, function( $tax ) { return ! empty( $tax->get_rate_name() ); } ); return $taxes; }
方案2:绕过插件的税行显示判断
如果方案1没生效,大概率是插件在渲染税行时单独判断了金额是否大于0。我们可以用wc_pip_display_tax_row过滤器直接修改这个判断逻辑:
add_filter( 'wc_pip_display_tax_row', 'force_display_zero_tax_row', 10, 3 ); function force_display_zero_tax_row( $display, $tax, $order ) { // 只要税项有名称,哪怕金额为0也强制显示 if ( ! empty( $tax->get_rate_name() ) && $tax->get_amount() == 0 ) { return true; } return $display; }
额外注意事项
- 测试前记得清空WooCommerce缓存和浏览器缓存,避免旧规则干扰结果;
- 如果你的主题或其他插件也有税项相关的自定义逻辑,可以把代码里的优先级数字(比如
10)改成99,确保我们的代码最后执行; - 要是用的是插件旧版本,可能需要核对一下钩子名称是否匹配,不过最新版本的插件这两个钩子都是有效的。
这样调整后,发票里应该就能正常显示你需要的0税率税名了。
内容的提问来源于stack exchange,提问作者anotherbreed
相关产品推荐
相关产品推荐

