如何基于taxonomy对分类页商品排序 优先展示brand:apple的商品
按brand taxonomy优先展示apple品牌商品的设置方案
通用实现逻辑
给商品列表的排序规则新增自定义权重:将brand字段值为apple的商品权重设为1,samsung的设为2,按权重升序作为第一排序条件,原有排序规则(如上架时间、销量等)作为第二排序条件即可。
常见场景具体操作
WooCommerce 站点
将以下代码添加到当前主题的functions.php文件中即可生效:
add_action( 'pre_get_posts', 'custom_brand_priority_sort' ); function custom_brand_priority_sort( $query ) { // 仅对前台商品分类页主查询生效 if ( ! is_admin() && $query->is_main_query() && is_product_category() ) { // 若brand为自定义分类法,将下方meta_query替换为tax_query即可 $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'brand', 'value' => 'apple', 'compare' => '=' ), array( 'key' => 'brand', 'value' => 'samsung', 'compare' => '=' ) ) ); // 自定义排序规则 $query->set( 'orderby', array( 'meta_value' => 'ASC', 'date' => 'DESC' // 此处可替换为price、sales等原有排序字段 ) ); } }
Shopify 站点
- 商品数量少的情况:进入对应分类页设置,点击
排序下拉框选择「手动」,直接拖拽所有apple品牌商品到samsung商品上方保存即可 - 商品数量多的情况:通过Shopify API给所有apple品牌商品标记自定义排序值
priority:1,samsung标记为priority:2,分类页排序选择按priority字段升序排列即可
自定义开发站点
原生SQL实现示例
SELECT * FROM products WHERE category_id = 【你的分类ID】 ORDER BY CASE WHEN brand = 'apple' THEN 1 ELSE 2 END ASC, created_at DESC; -- 此处可替换为原有排序规则,如sales、price等
Laravel ORM实现示例
$products = Product::where('category_id', $categoryId) ->orderByRaw("CASE WHEN brand = 'apple' THEN 1 ELSE 2 END ASC") ->orderBy('created_at', 'desc') ->get();
注意事项
- 若你站点的
brand是用分类法存储而非自定义字段存储,只需将对应查询条件里的字段查询替换为分类法查询即可,排序逻辑不需要改动 - 第二排序维度可以根据你的业务需求自由调整,不会影响apple品牌优先展示的规则
内容的提问来源于stack exchange,提问作者Ilterg
相关产品推荐
相关产品推荐

