如何用WooCommerce短码按品牌排序在售商品?
按品牌排序WooCommerce在售商品短码
可以实现按品牌排序,WooCommerce的[products]短码默认orderby参数不支持直接指定品牌,但通过过滤器钩子可以修改查询逻辑,具体步骤如下:
- 确认你的商品品牌是通过WooCommerce产品属性创建的(属性对应的meta key格式为
pa_{属性slug},比如属性slug是brand,则meta key为pa_brand)。 - 将以下代码添加到主题的
functions.php文件或自定义功能插件中:
add_filter( 'woocommerce_shortcode_products_query', 'sort_products_by_brand_in_sale_shortcode', 10, 3 ); function sort_products_by_brand_in_sale_shortcode( $query_args, $atts, $loop_name ) { // 仅匹配目标在售商品短码 if ( isset( $atts['on_sale'] ) && $atts['on_sale'] === 'true' && isset( $atts['title'] ) && $atts['title'] === 'Check our Products on Sale!' ) { // 按品牌属性排序,可将ASC改为DESC切换降序 $query_args['meta_key'] = 'pa_brand'; $query_args['orderby'] = 'meta_value'; $query_args['order'] = 'ASC'; } return $query_args; }
- 代码说明:
- 这段钩子只会作用于你指定的在售商品短码(通过
on_sale和title参数匹配),不会影响其他短码或页面。 - 如果你的品牌属性slug不是
brand,请将pa_brand替换为实际的meta key(比如属性slug是product-brand,则改为pa_product-brand)。 - 若品牌存储在自定义字段中,只需把
meta_key改为对应的自定义字段键名即可。
- 这段钩子只会作用于你指定的在售商品短码(通过
你的原短码无需修改,保持原样即可:
[products on_sale="true" columns="6" rows="7" title="Check our Products on Sale!"]
内容的提问来源于stack exchange,提问作者Graham Toomey
相关产品推荐
相关产品推荐

