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

WooCommerce库存≤2时禁止购买产品变体的功能实现问题

解决方案:基于库存数量控制WooCommerce产品可购买状态

原代码问题分析

你当前的代码存在两个核心问题:

  • 在woocommerce_get_availability钩子内动态添加/移除woocommerce_is_purchasable过滤器是错误操作——过滤器是全局生效的,会导致所有产品的可购买状态被最后加载的产品设置覆盖,无法实现单个产品/变体的精准控制。
  • 未处理产品变体的库存判断逻辑,仅针对简单产品做了处理。

修正后的代码实现

以下代码可同时处理简单产品和变体产品,严格按照需求(库存≤2时不可购买,库存>2时可购买,库存0时标记售罄)实现功能:

// 修改库存状态提示文本
function custom_woocommerce_get_availability( $availability, $product ) {       
    // 开启库存管理的产品
    if ( $product->managing_stock() ) {
        // 获取库存数量(变体产品需获取当前选中变体的库存)
        $stock_quantity = $product->is_type('variation') ? $product->get_stock_quantity() : $product->get_stock_quantity();
        
        if ( $stock_quantity <= 0 ) {
            $availability['availability'] = __('OUT OF STOCK', 'woocommerce' );
            $availability['class'] = 'out-of-stock'; // 添加上售罄样式类
        } elseif ( $stock_quantity > 0 && $stock_quantity <= 2 ) {
            $availability['availability'] = __('Available in Store Only', 'woocommerce' );
            $availability['class'] = 'in-store-only'; // 添加到店自提样式类
        } elseif ( $stock_quantity >= 3 )  {
            $availability['availability'] = __('IN STOCK', 'woocommerce' );
            $availability['class'] = 'in-stock'; // 添加库存充足样式类
        }
    } else {
        // 未开启库存管理的产品
        if ( $product->is_in_stock() ) {
            $availability['availability'] = __('库存开启,现货', 'woocommerce' );      
        } else {
            $availability['availability'] = __('库存关闭,缺货', 'woocommerce' );              
        }
    }
    return $availability;
}
add_filter( 'woocommerce_get_availability', 'custom_woocommerce_get_availability', 10, 2 );

// 控制产品是否可购买
function custom_woocommerce_is_purchasable( $purchasable, $product ) {
    // 仅对开启库存管理的产品生效
    if ( $product->managing_stock() ) {
        // 获取对应库存数量
        $stock_quantity = $product->is_type('variation') ? $product->get_stock_quantity() : $product->get_stock_quantity();
        
        // 库存≤2时不可购买,>2时可购买
        if ( $stock_quantity <= 2 ) {
            return false;
        } else {
            return true;
        }
    }
    // 未开启库存管理的产品保持原有状态
    return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'custom_woocommerce_is_purchasable', 10, 2 );

代码说明

  • 将库存文本修改和可购买状态控制拆分为两个独立的过滤器函数,避免全局污染。
  • 针对变体产品做了判断,通过$product->is_type('variation')获取当前选中变体的库存数量,确保变体的状态判断准确。
  • 为不同库存状态添加了对应的CSS类,方便前端自定义样式。
  • 严格遵循需求逻辑:库存≤2(包含0)时不可购买,库存>2时可购买。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:40:20