WooCommerce免运费计数器适配折扣码功能改造求助
WooCommerce免运费计数器折扣码适配修复
问题描述
现有免运费计数器逻辑基于购物车未折扣小计(WC()->cart->subtotal)判断是否满足免运费门槛,导致用户使用折扣码后,实际支付金额低于门槛时无法触发差额提示。例如:购物车原金额164.68pln满足免运费,使用15%折扣码后实际金额139.98pln,此时计数器未显示需补充的金额。
修复方案
将判断逻辑改为基于应用折扣后的商品小计,替换原有代码中获取当前金额的方式:
修改后的完整代码
// 免运费金额提示(未达标时) add_action( 'woocommerce_before_cart', 'ml_free_shipping_cart_notice' ); function ml_free_shipping_cart_notice() { $min_amount = 150; // 修改为你的免运费门槛金额 // 计算应用折扣后的商品小计 $current = WC()->cart->subtotal - WC()->cart->discount_total; if ( $current < $min_amount ) { $added_text = 'Do darmowej przesyłki brakuje jeszcze ' . wc_price( $min_amount - $current ) . '!'; $return_to = wc_get_page_permalink( 'shop' ); $notice = sprintf( '<a href="%s" class="button wc-forward">%s</a> %s', esc_url( $return_to ), 'Kontynuuj zakupy', $added_text ); wc_print_notice( $notice, 'notice' ); } } // 免运费达标提示 add_action( 'woocommerce_before_cart', 'free_shipping_info' ); function free_shipping_info() { $min_amount = 150; // 修改为你的免运费门槛金额 // 计算应用折扣后的商品小计 $current = WC()->cart->subtotal - WC()->cart->discount_total; if ( $current >= $min_amount ) { $added_text = 'Przekroczyłeś 150zł! Twoje zamówienie wyślemy za darmo! :) Wybierz dowolny sposób wysyłki!'; $notice = sprintf( $added_text ); wc_print_notice( $notice, 'notice' ); } }
关键修改说明
将原有代码中的:
$current = WC()->cart->subtotal;
替换为:
$current = WC()->cart->subtotal - WC()->cart->discount_total;
WC()->cart->subtotal:未应用任何折扣的商品总金额WC()->cart->discount_total:当前购物车的总折扣金额(包括优惠券、促销等)- 计算后得到的
$current为用户实际需要支付的商品金额,确保判断逻辑与用户最终支付金额一致。
内容的提问来源于stack exchange,提问作者mwlandof
相关产品推荐
相关产品推荐

