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
相关产品推荐
相关产品推荐

