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

WooCommerce:基于配送区域与购物车金额阈值显示动态消息报错求助

修复基于配送区域显示购物车消息的Woocommerce代码

原代码存在的问题

  • 变量名不一致:定义了$chosen_shipping_zone_id,却使用未定义的$chosen_shipping_method_id进行拆分,直接导致报错
  • 获取配送区域的方式错误:WC()->session->get('chosen_shipping_methods')返回的是配送方法ID,而非配送区域ID,无法通过拆分得到区域名称
  • 逻辑判断不符合需求:原代码的条件逻辑混乱,未实现「区域1+金额<29显示文本1、区域2+金额<49显示文本2」的核心需求
  • 消息内容固定:未根据不同条件切换对应的提示文本

修正后的代码

add_action( 'woocommerce_cart_totals_after_shipping', 'shipping_zone_based_cart_notice', 20 );
add_action( 'woocommerce_review_order_after_shipping', 'shipping_zone_based_cart_notice', 20 );
function shipping_zone_based_cart_notice() {
    // 避免重复输出
    if ( did_action( 'woocommerce_cart_totals_after_shipping' ) >= 2 || did_action( 'woocommerce_review_order_after_shipping' ) >= 2 ) {
        return;
    }

    // 检查购物车和会话是否可用
    if ( ! WC()->cart || ! WC()->session ) {
        return;
    }

    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );
    if ( empty( $chosen_shipping_methods ) ) {
        return;
    }

    $chosen_shipping_method_id = reset( $chosen_shipping_methods );
    $shipping_method = WC_Shipping_Method::get_instance( $chosen_shipping_method_id );
    
    // 获取当前配送区域名称
    $shipping_zone = wc_get_shipping_zone( $shipping_method );
    $shipping_zone_name = $shipping_zone->get_zone_name();

    $cart_subtotal = WC()->cart->subtotal;
    $message = '';

    // 根据需求设置条件和对应文本
    if ( $shipping_zone_name === '配送区域1' && $cart_subtotal < 29 ) {
        $message = '文本1:满29欧元即可享受优惠配送'; // 替换为实际文本1
    } elseif ( $shipping_zone_name === '配送区域2' && $cart_subtotal < 49 ) {
        $message = '文本2:满49欧元即可免运费'; // 替换为实际文本2
    }

    // 输出消息
    if ( ! empty( $message ) ) {
        echo '</tr><tr class="shipping-notice"><th>&nbsp;</th><td data-title="配送提示">' . esc_html( $message ) . '</td>';
    }
}

代码说明

  1. 变量修正:统一变量命名,消除未定义变量报错
  2. 正确获取配送区域:通过wc_get_shipping_zone()方法,从选中的配送方法对象中获取所属区域名称
  3. 逻辑匹配需求:明确判断「配送区域+购物车金额」的组合条件,分别设置对应提示文本
  4. 安全输出:使用esc_html()确保文本输出安全,避免XSS风险
  5. 兼容性检查:增加购物车和会话的可用性检查,避免异常场景报错

注意事项

  • 将代码中的'配送区域1'和'配送区域2'替换为你后台实际设置的配送区域名称
  • 替换'文本1:...'和'文本2:...'为你需要显示的自定义提示内容
  • 代码需添加到主题的functions.php文件或自定义插件中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:50:13