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

如何移除WooCommerce特定配送类别对应的结账页下单按钮?

解决WooCommerce结账页仅Freight配送时移除“Place order”按钮的问题

你的现有代码已经实现了移除Flexible Shipping配送方式的逻辑,但确实缺少了检测当前是否仅Freight配送可用,并据此修改结账按钮的核心部分。下面是完整的解决方案,分两步实现:

1. 优化配送方式过滤逻辑(更健壮的版本)

先把你现有的配送方式过滤代码优化一下,贴合WooCommerce的包裹处理逻辑,确保准确识别购物车中的Freight类商品并移除Flexible Shipping:

add_filter( 'woocommerce_package_rates', 'wc_hide_flexible_shipping_for_freight_class', 10, 2 );
function wc_hide_flexible_shipping_for_freight_class( $rates, $package ) {
    // 替换为你的Freight配送类ID
    $freight_shipping_class_id = 332;
    $has_freight_item = false;

    // 检查当前包裹内的商品是否包含Freight配送类
    foreach( $package['contents'] as $item ) {
        if( $item['data']->get_shipping_class_id() == $freight_shipping_class_id ) {
            $has_freight_item = true;
            break;
        }
    }

    if( $has_freight_item ) {
        // 移除Flexible Shipping的配送方式(替换为你的实际费率ID)
        unset( $rates['flexible_shipping_7_2'] );
    }

    return $rates;
}

这里用$package['contents']替代直接遍历购物车,更适配多包裹场景的处理逻辑。

2. 检测仅Freight可用时移除/替换结账按钮

使用woocommerce_order_button_html钩子,判断当前可用配送方式是否只有Freight,再修改按钮:

add_filter( 'woocommerce_order_button_html', 'wc_replace_place_order_button_for_freight_only' );
function wc_replace_place_order_button_for_freight_only( $button_html ) {
    // 替换为你的Freight配送方式的实际费率ID(可在结账页HTML中查看该选项的value属性)
    $freight_rate_id = 'your_freight_rate_id';
    $available_rates = WC()->session->get( 'shipping_for_package_0' )['rates'] ?? [];
    
    // 检查是否仅Freight这一种配送方式可用
    if( count( $available_rates ) === 1 && array_key_exists( $freight_rate_id, $available_rates ) ) {
        // 方案1:完全移除按钮
        return '';

        // 方案2:替换为引导按钮(更友好,建议使用)
        // return '<a href="tel:你的联系电话" class="button alt">联系我们获取运费后完成订单</a>';
    }

    // 其他情况返回原按钮
    return $button_html;
}

关键提示:

  • 一定要把$freight_rate_id替换为实际的Freight配送方式ID,你可以在结账页右键查看Freight配送选项的HTML代码,找到它的value值。
  • 如果你的店铺支持多包裹配送,需要循环检查所有包裹的配送方式,而不仅仅是shipping_for_package_0。
  • 方案2的引导按钮比直接移除更合理,能避免用户困惑,引导他们主动联系你确认运费。

最后必做步骤

修改代码后,记得清空WooCommerce缓存(路径:WooCommerce > 设置 > 高级 > 系统状态 > 工具 > 清除缓存),确保配送方式的修改和按钮逻辑生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:02:07