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

WooCommerce使用woocommerce_product_get_stock_quantity钩子触发502错误

WooCommerce自定义库存显示触发502错误的解决方案

错误根因

代码触发502的核心问题如下:

  • 无限递归死循环:你挂载的woocommerce_product_get_stock_quantity、woocommerce_product_variation_get_stock_quantity钩子本身就是用来过滤get_stock_quantity()方法返回值的,回调函数中再次调用$_product->get_stock_quantity()会反复触发自定义的回调逻辑,形成无限循环,直到服务器进程超时抛出502错误。
  • 冗余代码:函数内声明的global $product全程未被调用,属于无效代码。
  • 返回值类型不兼容:库存数量原始返回值为整型,直接返回字符串"5+",如果后续有对库存值做数值运算的逻辑,会触发类型错误。

修复方案

方案1:直接修复原有代码

直接使用钩子传入的第一个参数$value即可获取原始库存值,不需要再次调用查询方法,避免递归:

add_filter( 'woocommerce_product_get_stock_quantity' ,'custom_get_stock_quantity', 10, 2 );
add_filter( 'woocommerce_product_variation_get_stock_quantity' ,'custom_get_stock_quantity', 10, 2 );
function custom_get_stock_quantity( $value, $_product ) {
    if ( $value > 5 ) {
        return "5+";
    }
    return $value;
}

注意:该方案会修改全局库存数值的返回结果,如果后台有库存统计、订单扣减等依赖库存数值运算的逻辑,可能出现异常,更推荐使用方案2。

方案2:仅修改前端显示层(更稳妥)

如果只需要修改单品页的库存显示文本,不需要修改底层库存数值,建议使用专门的显示层钩子,完全不影响核心库存逻辑:

add_filter( 'woocommerce_get_availability_text', 'custom_stock_display_text', 10, 2 );
function custom_stock_display_text( $text, $product ) {
    // 仅对可管理库存的在售商品生效
    if ( $product->managing_stock() && $product->is_in_stock() ) {
        $stock_qty = $product->get_stock_quantity();
        if ( $stock_qty > 5 ) {
            return '5+ 件有货';
        }
    }
    return $text;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:07