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

WooCommerce库存不足时隐藏付费快递配送选项的适配方案

WooCommerce 按商品库存状态控制配送方式显示

需求回顾

  • 已配置两种配送方式:
    • 付费48小时快递(按购物车总额百分比计费)
    • 免费29天普通配送
  • 规则要求:
    • 购物车中存在**任一库存≤0(预售)**或库存不足以覆盖购买数量的商品时,隐藏付费快递,仅显示免费配送
    • 所有商品库存充足时,显示两种配送方式

适配通用环境的解决方案

原代码依赖第三方插件的配送方式标识,以下是适配原生WooCommerce的修改版代码,无需依赖外部插件:

1. 先获取你的付费快递配送方式ID

要准确移除目标配送方式,需先获取其ID:

  • 登录WooCommerce后台,进入「配送」→ 对应配送方式的编辑页面
  • 查看浏览器地址栏,类似 wp-admin/post.php?post=123&action=edit 中的post=123,123就是该配送方式的ID
  • 或者临时添加以下代码到主题functions.php,在结算页查看所有可用配送方式的ID和名称:
add_action('woocommerce_before_cart', 'print_shipping_method_ids');
function print_shipping_method_ids() {
    if (WC()->cart->needs_shipping()) {
        $shipping_methods = WC()->shipping()->get_shipping_methods();
        echo '<pre>';
        foreach ($shipping_methods as $method) {
            echo 'ID: ' . $method->id . ' | 名称: ' . $method->title . '<br>';
        }
        echo '</pre>';
    }
}

添加后访问购物车/结算页,就能看到所有配送方式的ID信息,获取后即可删除这段临时代码。

2. 最终功能代码

将以下代码添加到主题的functions.php文件,或使用代码片段插件:

/* 根据商品库存状态隐藏付费配送方式 */
add_filter('woocommerce_available_shipping_methods', 'hide_paid_shipping_for_oos_items', 10, 1);

// 检查购物车是否存在库存不足/预售商品
function has_oos_items_in_cart() {
    $has_oos = false;
    
    // 遍历购物车商品
    foreach (WC()->cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        $stock_qty = $product->get_stock_quantity();
        $cart_qty = $cart_item['quantity'];
        
        // 条件:库存≤0(预售) 或 购买数量超过现有库存
        if ($stock_qty <= 0 || $cart_qty > $stock_qty) {
            $has_oos = true;
            break;
        }
    }
    
    return $has_oos;
}

// 过滤可用配送方式
function hide_paid_shipping_for_oos_items($available_methods) {
    // 替换成你获取到的付费快递配送方式ID
    $paid_shipping_id = 'YOUR_PAID_SHIPPING_METHOD_ID';
    
    // 如果购物车存在库存不足商品,移除付费配送方式
    if (has_oos_items_in_cart() && isset($available_methods[$paid_shipping_id])) {
        unset($available_methods[$paid_shipping_id]);
    }
    
    return $available_methods;
}

代码说明

  • has_oos_items_in_cart():遍历购物车所有商品,检查是否符合库存不足/预售的条件,返回布尔值
  • hide_paid_shipping_for_oos_items():通过woocommerce_available_shipping_methods过滤器,当满足条件时移除指定的付费配送方式
  • 代码使用WC()->cart替代原代码的global $woocommerce,符合WooCommerce最新开发规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:45:36