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

WooCommerce单产品页库存状态显示问题求助:无库存管理场景适配

解决方案

你的问题核心在于未处理**禁用库存管理(无限库存)**的场景,同时代码存在几处细节问题:

  • 冗余调用global $product,函数参数已提供$_product,易引发变量冲突
  • 未判断是否启用库存管理,禁用时get_stock_quantity()返回null,导致文案拼接异常
  • 条件判断顺序不合理,预订状态会被在库存状态覆盖
  • 过滤器优先级过低,可能被其他插件/主题的设置覆盖

以下是修复后的代码:

add_filter( 'woocommerce_get_availability', 'custom_product_stock_availability', 999, 2 );
function custom_product_stock_availability( $availability, $_product ) {
    // 先处理预订状态(优先级最高,避免被其他状态覆盖)
    if ( $_product->is_on_backorder() ) {
        $availability['availability'] = __( '预订文案', 'woocommerce' );
        return $availability;
    }

    // 处理无库存状态
    if ( ! $_product->is_in_stock() ) {
        $availability['availability'] = __( '缺货文案', 'woocommerce' );
        return $availability;
    }

    // 区分库存管理状态,处理有库存/无限库存场景
    if ( $_product->managing_stock() ) {
        // 启用库存管理,显示带数量的文案
        $stock_quantity = $_product->get_stock_quantity();
        $availability['availability'] = sprintf( __( '库存剩余 %s 件', 'woocommerce' ), $stock_quantity );
    } else {
        // 禁用库存管理(无限库存),显示自定义在库文案
        $availability['availability'] = __( '现货供应', 'woocommerce' );
    }

    return $availability;
}

关键改动说明:

  • 调高过滤器优先级:设为999,确保自定义逻辑能覆盖WooCommerce默认或其他插件的设置
  • 优化条件顺序:先判断预订状态,再处理无库存,最后覆盖有库存/无限库存场景,避免状态被覆盖
  • 增加库存管理判断:通过$_product->managing_stock()区分是否启用库存管理,针对无限库存单独设置文案
  • 移除冗余全局变量:直接使用函数传入的$_product参数,避免变量冲突
  • 使用sprintf拼接文案:更符合多语言本地化规范,方便后续翻译适配

多语言适配提示:

所有文案都通过__()函数包裹,在WooCommerce多语言插件(如WPML、Polylang)中添加对应语言的翻译即可实现多语言切换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:15:35