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

WooCommerce产品变体旁显示缺货功能实现问题求助

解决WooCommerce产品变体旁显示“缺货”的问题

看起来你用的代码片段可能因为逻辑不完整或者对WooCommerce变体数据的处理不到位,导致没能正常显示缺货标识。我给你整理了一套更可靠的实现方案:

方案一:直接修改变体下拉选项的显示文本

这个方法会在缺货的变体选项旁直接追加“缺货”字样,逻辑清晰,适配大部分WooCommerce版本:

add_filter( 'woocommerce_variation_option_name', 'display_out_of_stock_label_on_variation_options', 10, 3 );
function display_out_of_stock_label_on_variation_options( $term_name, $term, $attribute ) {
    // 后台不执行,只在前端生效
    if ( is_admin() ) return $term_name;

    global $product;
    if ( ! $product instanceof WC_Product ) return $term_name;

    // 获取当前属性的slug
    $attribute_slug = sanitize_title( $attribute );
    
    // 遍历所有产品变体
    foreach ( $product->get_available_variations() as $variation ) {
        // 检查当前变体是否包含当前属性项
        if ( isset( $variation['attributes']['attribute_' . $attribute_slug] ) && $variation['attributes']['attribute_' . $attribute_slug] === $term->slug ) {
            // 获取变体对象
            $variation_obj = wc_get_product( $variation['variation_id'] );
            // 判断是否缺货
            if ( ! $variation_obj->is_in_stock() ) {
                $term_name .= ' *缺货*';
                break; // 找到对应变体就停止遍历,提升效率
            }
        }
    }

    return $term_name;
}

方案二:针对下拉选项添加样式化的缺货标识

如果你想让“缺货”字样更醒目,可以用这个版本,给标识加个醒目的样式:

add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'add_out_of_stock_class_to_variation_options', 10, 2 );
function add_out_of_stock_class_to_variation_options( $html, $args ) {
    if ( is_admin() ) return $html;

    $product = wc_get_product( $args['product']->get_id() );
    if ( ! $product ) return $html;

    $attribute_slug = sanitize_title( $args['attribute'] );
    
    // 遍历所有变体,收集缺货的属性slug
    $out_of_stock_slugs = array();
    foreach ( $product->get_available_variations() as $variation ) {
        $variation_obj = wc_get_product( $variation['variation_id'] );
        if ( ! $variation_obj->is_in_stock() ) {
            $out_of_stock_slugs[] = $variation['attributes']['attribute_' . $attribute_slug];
        }
    }

    // 给对应的选项添加样式类和文本
    foreach ( $args['options'] as $option ) {
        $option_slug = sanitize_title( $option );
        if ( in_array( $option_slug, $out_of_stock_slugs ) ) {
            $html = str_replace( '>' . esc_html( $option ) . '</option>', '>' . esc_html( $option ) . ' <span style="color:red; font-weight:bold;">(缺货)</span></option>', $html );
        }
    }

    return $html;
}

使用说明

  1. 把上面的代码复制到你的WordPress主题(或子主题)的functions.php文件末尾;
  2. 或者使用专门的代码片段插件(比如Code Snippets)来添加,避免主题更新丢失代码;
  3. 刷新前端产品页面,查看变体下拉选项的显示效果。

注意事项

  • 确保你的WooCommerce版本是3.0+,因为代码用到了较新的产品对象方法;
  • 如果你的产品有多个属性组合,两个方案都会自动匹配对应属性项的库存状态;
  • 如果你用了缓存插件,记得清理缓存后再测试效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:16:25