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

WooCommerce可变产品库存变体计数及单变体价格显示问题

嘿,我来帮你搞定这个WooCommerce可变产品的价格显示问题!你遇到的核心问题是当只剩一个有库存的变体时,价格会被隐藏,那我们就先从统计有库存的变体数量入手,再用这个数量来调整价格显示逻辑。

解决方案步骤

1. 先写个函数统计有库存的变体数量

这个函数会帮你数清楚当前可变产品里,到底有多少个变体是处于“有库存(in stock)”状态的:

// 统计产品中可用(有库存)的变体数量
function get_in_stock_variation_count( $product ) {
    // 如果不是可变产品,直接返回0
    if ( ! $product->is_type( 'variable' ) ) {
        return 0;
    }
    
    $in_stock_count = 0;
    // 获取产品的所有可用变体
    $all_variations = $product->get_available_variations();
    
    // 挨个检查每个变体的库存状态
    foreach ( $all_variations as $variation ) {
        $variation_product = wc_get_product( $variation['variation_id'] );
        if ( $variation_product->is_in_stock() ) {
            $in_stock_count++;
        }
    }
    
    return $in_stock_count;
}

2. 修改价格显示逻辑,加入数量判断

接下来我们把你原来的价格显示代码改一改,结合上面的库存数量来调整:

// 自定义可变产品价格显示逻辑
add_filter( 'woocommerce_variable_sale_price_html', 'custom_variable_product_price_display', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'custom_variable_product_price_display', 10, 2 );

function custom_variable_product_price_display( $price, $product ) {
    // 调用上面的函数,拿到有库存的变体数量
    $in_stock_variations = get_in_stock_variation_count( $product );
    
    // 情况1:只有1个有库存的变体,直接显示这个变体的价格
    if ( $in_stock_variations === 1 ) {
        $available_variations = $product->get_available_variations();
        foreach ( $available_variations as $variation ) {
            $variation_product = wc_get_product( $variation['variation_id'] );
            if ( $variation_product->is_in_stock() ) {
                // 基础价格
                $price = wc_price( $variation_product->get_price() );
                // 如果是促销价,显示原价+促销价的格式
                if ( $variation_product->is_on_sale() ) {
                    $price = wc_format_sale_price( wc_price( $variation_product->get_regular_price() ), wc_price( $variation_product->get_sale_price() ) );
                }
                break;
            }
        }
    } 
    // 情况2:多个有库存的变体,隐藏价格区间,只显示选中变体的价格
    else if ( $in_stock_variations > 1 ) {
        $price = '';
        // 确保选中变体时能显示价格
        add_filter( 'woocommerce_show_variation_price', '__return_true' );
    }
    
    return $price;
}

逻辑说明

  • 当只有1个有库存的变体时:直接把这个变体的价格(包括促销价)显示出来,不会再隐藏
  • 当有多个有库存的变体时:继续保持你想要的逻辑——隐藏价格区间,只有用户选中某个变体时才显示对应价格

注意事项

  • 把这些代码添加到你当前主题的functions.php文件末尾就行,或者用专门的代码片段插件来添加,这样主题更新时代码不会丢失
  • 记得测试几种场景:比如多个变体都有货、只剩一个有货、全部缺货的情况,确保价格显示正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:20:19