如何修改WooCommerce商品页库存显示 自定义高库存值展示规则
解决方案
我们直接使用WooCommerce原生的woocommerce_get_availability_text过滤器实现需求,该钩子会在所有需要展示库存文本的场景触发,天然兼容商品分类列表页、商品详情页,同时支持简单产品、可变产品等所有内置产品类型,不需要额外处理多页面适配逻辑。
完整实现代码
add_filter( 'woocommerce_get_availability_text', 'custom_stock_display_text', 99, 2 ); function custom_stock_display_text( $availability_text, $product ) { // 库存显示阈值 $stock_threshold = 50; // 1. 获取产品真实总库存 $real_total_stock = 0; if ( $product->is_type( 'variable' ) ) { // 可变产品:汇总所有在售可售变体的库存 $variation_ids = $product->get_children(); foreach ( $variation_ids as $variation_id ) { $variation = wc_get_product( $variation_id ); if ( $variation && $variation->is_purchasable() && $variation->get_manage_stock() ) { $real_total_stock += (int) $variation->get_stock_quantity(); } } } else { // 简单产品等其他类型:直接读取产品库存 if ( $product->get_manage_stock() ) { $real_total_stock = (int) $product->get_stock_quantity(); } } // 2. 按规则修改库存显示文本 if ( $product->is_in_stock() && $real_total_stock > 0 ) { if ( $real_total_stock > $stock_threshold ) { // 真实库存大于阈值,显示50-100的随机值 $display_stock = rand( 50, 100 ); $availability_text = sprintf( __( '%s in stock', 'woocommerce' ), $display_stock ); } else { // 真实库存小于等于阈值,显示真实值 $availability_text = sprintf( __( '%s in stock', 'woocommerce' ), $real_total_stock ); } } // 缺货状态保持原有显示逻辑不变 return $availability_text; }
使用说明
- 将上述代码添加到主题的
functions.php文件中,或者自定义代码片段插件中即可生效 - 代码自动覆盖所有WooCommerce原生库存展示位置,无需额外配置
- 如果需要固定单个产品的随机显示值(避免每次刷新数值变动),可以将
$display_stock = rand( 50, 100 );替换为下方代码:
// 以产品ID为种子生成固定随机值,同一个产品显示数值不会随刷新变化 $display_stock = $stock_threshold + ( crc32( $product->get_id() ) % 51 );
内容的提问来源于stack exchange,提问作者Loris GFT
相关产品推荐
相关产品推荐

