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

如何让get_available_variations()循环遵循属性默认显示顺序?

解决WooCommerce变体循环与下拉框排序一致的问题

你遇到的情况是:$product->get_available_variations()默认按后台拖拽的变体顺序返回数据,但前端下拉框会遵循属性设置的排序规则(比如你设置的“名称”排序),导致两者排序不一致。

要让循环的变体排序和下拉框完全匹配,可以手动对变体数组按照属性的排序规则重新排序,代码示例如下:

$product = wc_get_product(get_the_ID());
// 获取原始可用变体数据
$variations = $product->get_available_variations();

// 获取产品属性的排序规则
$attributes = $product->get_attributes();

foreach ($attributes as $attr) {
    // 匹配属性设置的排序方式
    if ($attr->get_orderby() === 'name') {
        // 按属性选项名称排序
        usort($variations, function($a, $b) use ($attr) {
            $attr_slug = $attr->get_name();
            $a_attr_val = $a['attributes']['attribute_' . $attr_slug];
            $b_attr_val = $b['attributes']['attribute_' . $attr_slug];
            
            // 将属性slug转换为对应的选项名称
            $a_term = get_term_by('slug', $a_attr_val, 'pa_' . $attr_slug);
            $b_term = get_term_by('slug', $b_attr_val, 'pa_' . $attr_slug);
            
            return strcmp($a_term->name, $b_term->name);
        });
        break;
    } elseif ($attr->get_orderby() === 'menu_order') {
        // 按属性选项的后台拖拽顺序排序(若需要匹配该规则)
        usort($variations, function($a, $b) use ($attr) {
            $attr_slug = $attr->get_name();
            $a_attr_val = $a['attributes']['attribute_' . $attr_slug];
            $b_attr_val = $b['attributes']['attribute_' . $attr_slug];
            
            $a_term = get_term_by('slug', $a_attr_val, 'pa_' . $attr_slug);
            $b_term = get_term_by('slug', $b_attr_val, 'pa_' . $attr_slug);
            
            return $a_term->menu_order - $b_term->menu_order;
        });
        break;
    }
}

// 循环输出排序后的变体
foreach ( $variations as $variation ) { ?>
    <li>
        <img src="<?php echo esc_url($variation['image']['url']); ?>" alt="<?php echo esc_attr($variation['image']['alt']); ?>" />
    </li>
<?php } ?>

代码说明

  1. 先获取产品的原始可用变体数据
  2. 读取产品属性的排序设置,匹配你在后台配置的排序规则
  3. 使用usort函数对变体数组重新排序,确保和下拉框的排序逻辑一致
  4. 循环输出排序后的变体内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:46:11