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

WooCommerce如何获取所有带价格的商品变体并按价格降序排序

WooCommerce 获取带价格商品变体并排序实现方案

你使用的wc_get_product_terms()仅用于查询商品关联的属性术语数据,本身不包含变体商品的价格、库存等实体信息,因此无法返回价格数据。


完整实现代码

// 先校验当前商品为可变产品
if ( $product->is_type( 'variable' ) ) {
    // 1. 获取当前商品所有可用变体的完整数据
    $available_variations = $product->get_available_variations();
    
    $variation_data = [];
    foreach ( $available_variations as $item ) {
        $variation_data[] = [
            'variation_id'  => $item['variation_id'],
            'attributes'    => $item['attributes'], // 变体对应所有属性键值对
            'regular_price' => $item['display_regular_price'], // 原价
            'sale_price'    => $item['display_price'], // 优惠后实际展示价
            'is_in_stock'   => $item['is_in_stock'] // 可按需扩展其他字段
        ];
    }

    // 2. 按价格降序排序:用sale_price排序可替换为regular_price按原价排序
    // PHP7以下版本可将排序逻辑替换为 return $next['sale_price'] - $prev['sale_price'];
    usort($variation_data, function($prev, $next) {
        return $next['sale_price'] <=> $prev['sale_price'];
    });

    // 处理排序完成的变体数据即可
    print_r($variation_data);
}

指定属性过滤(适配原有需求)

如果仅需要查询某一个属性对应的变体,在循环中新增过滤逻辑即可:

// 替换为你需要查询的属性名,例如pa_color、pa_size
$target_attribute = '你的目标属性名';

foreach ( $available_variations as $item ) {
    $attr_key = 'attribute_' . $target_attribute;
    // 仅保留匹配指定属性的变体
    if ( isset($item['attributes'][$attr_key]) ) {
        $variation_data[] = [
            // 同上字段配置
            'attribute_value' => $item['attributes'][$attr_key]
        ];
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:04