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

WooCommerce购物车显示含/不含VAT价格时price变量返回0如何解决

问题原因

  • 错误调用全局$product对象:woocommerce_cart_item_price过滤器钩子上下文下全局产品对象经常不生效,应该从传入的$cart_item参数中获取产品实例
  • 直接访问产品price属性:WooCommerce 3.0+版本已废弃直接访问产品属性的写法,必须调用get_price()方法获取价格,否则会返回0或抛出错误
  • HTML标签嵌套混乱:代码中<small>标签内错误闭合了不存在的<p>标签,还有多余的闭合标签,导致前端DOM结构异常,显示错乱
  • 硬编码VAT税率不规范:手动写死20%税率无法适配WooCommerce后台的税务配置,也不支持不同产品/配送区域的差异化税率规则

修复后可运行代码

function sv_change_product_price_cart( $price, $cart_item, $cart_item_key ) {
    // 从购物车项目获取正确的产品实例
    $product = $cart_item['data'];
    if ( ! is_a( $product, 'WC_Product' ) ) return $price;

    // 用WooCommerce原生方法获取含税、不含税价格,自动适配后台税率配置
    $price_inc_tax = wc_get_price_including_tax( $product );
    $price_excl_tax = wc_get_price_excluding_tax( $product );

    // 格式化价格输出,修复标签嵌套错误
    $display_price = '<span class="amount">';
    $display_price .= '<span class="eptax">
        <span class="nprice">£' . number_format( $price_excl_tax, 2, ',', '.' ) . '</span>
        <small class="woocommerce-price-suffix" style="color:black"> ex VAT</small>
    </span> ';
    $display_price .= '<span class="ptax">
        <span class="nprice">£' . number_format( $price_inc_tax, 2, ',', '.' ) . '</span>
        <small class="woocommerce-price-suffix" style="color:black"> inc VAT</small>
    </span>';
    $display_price .= '</span>';
 
    return $display_price;
}
add_filter( 'woocommerce_cart_item_price', 'sv_change_product_price_cart', 10, 3 );

额外优化建议

  • 可以将number_format替换为WooCommerce原生的wc_price()方法,自动适配后台设置的货币符号、小数位、千位分隔符规则,不用手动写死格式
  • 样式代码建议写到主题的CSS文件中,不要内联在HTML里,方便后续统一修改

内容的提问来源于stack exchange,提问作者Sarah Profile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:15:01