You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:03:01