WooCommerce结账页订单总额为0时隐藏order-total区块的代码问题咨询
WooCommerce结账页订单金额为0时隐藏order-total模块修复方案
问题原因
- 变量语法错误:PHP中变量必须以
$符号开头,原代码漏写变量前缀,导致$cart_total未定义,值为null。PHP松散比较规则下null == 0返回结果为真,因此条件判断永远成立,无论实际金额多少都会执行移除操作。 - 金额取值方法错误:
WC()->cart->get_cart_total()返回的是带货币符号、千位分隔符的格式化字符串,无法直接用于数值比较,即使语法修正后也会出现判断异常。
修复后代码
// 结账页订单总金额为0时移除订单总览模块 add_action( 'woocommerce_checkout_order_review', 'remove_checkout_totals', 1 ); function remove_checkout_totals(){ // 获取纯数值类型的购物车总金额 $cart_total = floatval( WC()->cart->get_total( 'edit' ) ); // 浮点型判断增加精度容错,避免精度误差导致判断失效 if ( $cart_total < 0.01 ) { remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 ); } }
改动说明
- 补全变量前缀
$,修正变量未定义问题 - 改用
get_total('edit')获取未格式化的原始金额,通过floatval转换为浮点型数值,适配数值比较逻辑 - 用区间判断替代全等判断,避免浮点型精度问题导致的判断误差
内容的提问来源于stack exchange,提问作者Luca Farina
相关产品推荐
相关产品推荐

