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

WooCommerce购物车商品超15件时仅显示DHL配送的钩子实现

没问题,这个需求完全可以通过WooCommerce的原生钩子实现,不用依赖插件。我来给你详细的解决方案:

解决方案:通过woocommerce_package_rates钩子实现配送方式过滤

核心思路

我们会用到woocommerce_package_rates这个钩子——它专门用来过滤和修改购物车/结算页显示的配送方式列表。结合购物车商品数量的判断,我们可以轻松实现“超过15件仅保留指定配送方式”的逻辑。

步骤1:添加自定义代码到主题functions.php

把下面的代码添加到你的子主题(强烈推荐用子主题,避免主题更新丢失代码)的functions.php文件中:

add_filter( 'woocommerce_package_rates', 'force_only_dhl_when_more_than_15_items', 10, 2 );
function force_only_dhl_when_more_than_15_items( $rates, $package ) {
    // 获取购物车内商品总数量
    $cart_item_count = WC()->cart->get_cart_contents_count();

    // 当商品数量超过15件时,执行过滤逻辑
    if ( $cart_item_count > 15 ) {
        // 替换为你实际需要保留的配送方式ID(比如DHL的method_id)
        $allowed_method_id = 'dhl_shipping_method'; 

        // 遍历所有配送方式,只保留允许的那一个
        foreach ( $rates as $rate_key => $rate ) {
            if ( $rate->method_id !== $allowed_method_id ) {
                unset( $rates[ $rate_key ] );
            }
        }
    }

    return $rates;
}

// 清理配送费率缓存,确保修改即时生效
add_action( 'woocommerce_cart_updated', 'clear_shipping_rates_cache' );
add_action( 'woocommerce_update_options_shipping', 'clear_shipping_rates_cache' );
function clear_shipping_rates_cache() {
    WC()->session->set( 'shipping_for_package_0', false );
}

步骤2:获取并替换正确的配送方式ID

你需要把代码中的dhl_shipping_method替换成你店铺里DHL配送方式的实际ID,获取方法很简单:

  1. 进入WooCommerce后台 → 设置 → 配送 → 找到你的DHL配送方式并点击编辑
  2. 查看浏览器地址栏,比如链接是post.php?post=123&action=edit,其中的123就是该配送方式的ID;或者用浏览器开发者工具查看结算页的配送选项,每个选项的value属性里会包含method_id(比如Flexible Shipping创建的方式,ID可能是flexible_shipping_123)

如果不想用ID,也可以通过配送方式名称判断,把判断条件改成:

if ( $rate->label !== 'DHL国际快递' ) { // 替换成你的DHL方式显示名称
    unset( $rates[ $rate_key ] );
}

注意事项

  • 务必使用子主题的functions.php,否则主题更新后代码会被覆盖
  • 修改代码后,建议清空购物车重新添加商品测试,或者手动清理WooCommerce缓存确保生效
  • 如果你的店铺支持多包裹配送(比如不同商品发往不同地址),可以根据$package参数调整逻辑,大部分单包裹场景用上面的代码就足够

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:21:37