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

WooCommerce中按购物车小计隐藏指定配送方式的问题求助

WooCommerce 购物车金额达标后仅显示指定配送方式解决方案

问题描述

需实现:当购物车小计超过50英镑时,仅保留1种配送方式;低于该金额时恢复所有配送方式。网站已安装大量插件,不新增插件。此前尝试的代码首次生效,但更新购物车时配送方式无法同步变化,且金额低于阈值时隐藏的选项无法恢复。

错误代码核心问题

  1. 参数误用:woocommerce_package_rates钩子的第二个参数是$package(购物车包裹数据),而非直接的$order_total,无法正确获取实时购物车金额。
  2. 缓存未处理:WooCommerce会缓存配送方式数据,导致购物车更新时无法实时刷新配送选项。

正确实现代码

将以下代码添加到主题的functions.php文件中:

// 根据购物车小计控制配送方式显示
add_filter( 'woocommerce_package_rates', 'control_shipping_methods_based_on_cart_total', 10, 2 );
function control_shipping_methods_based_on_cart_total( $rates, $package ) {
    // 获取购物车实时小计(不含税费、运费)
    $cart_subtotal = WC()->cart->subtotal;
    // 设置金额阈值:50英镑
    $threshold = 50;

    // 替换为你需要保留的目标配送方式ID
    $keep_shipping_method = 'flat_rate:7';

    // 小计超过阈值时,仅保留指定配送方式
    if ( $cart_subtotal > $threshold ) {
        foreach ( $rates as $rate_key => $rate ) {
            if ( $rate_key !== $keep_shipping_method ) {
                unset( $rates[$rate_key] );
            }
        }
    }

    // 强制清除配送缓存,确保购物车更新时实时生效
    foreach ( $rates as $rate ) {
        $rate->cost = $rate->cost;
    }

    return $rates;
}

使用说明

  1. 替换配送方式ID:将代码中的flat_rate:7替换为你需要保留的配送方式ID。可在WooCommerce后台「配送」设置中,编辑目标配送方式,从URL的post=参数后获取数字ID,组合为flat_rate:ID或free_shipping:ID格式。
  2. 初始化缓存清除:首次添加代码后,在WooCommerce后台「系统状态」→「工具」中点击「清除配送方式缓存」,确保代码生效。
  3. 功能验证:添加商品调整购物车金额,测试超过/低于50英镑时,配送方式是否正确切换。

内容的提问来源于stack exchange,提问作者Sophie Nicole Casey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:47:10