WooCommerce按自定义分类法筛选并按产品类别分组展示产品
我来帮你搞定这个需求!要实现按默认产品类别分组展示指定device分类下的产品,咱们可以通过自定义WooCommerce的查询和模板输出逻辑来完成,具体步骤和代码示例如下:
实现方案
1. 识别当前查询的Device分类项
首先得确认当前页面是针对device自定义分类的查询,拿到对应的分类对象,这样才能精准筛选出该分类下的所有产品。
// 获取当前页面对应的device分类对象 if ( is_tax('device') ) { $current_device_term = get_queried_object(); $device_term_id = $current_device_term->term_id; }
2. 筛选产品并按默认类别分组
接下来要查询出属于这个device分类的所有产品,然后把它们按WooCommerce的*默认产品类别(product_cat)*进行分组,避免重复分类的情况。
if ( isset($device_term_id) ) { // 构建产品查询参数 $products_args = array( 'post_type' => 'product', 'posts_per_page' => -1, // 显示该分类下所有产品,可按需修改 'tax_query' => array( array( 'taxonomy' => 'device', 'field' => 'term_id', 'terms' => $device_term_id, ), ), ); $products_query = new WP_Query($products_args); $grouped_products = array(); if ( $products_query->have_posts() ) { while ( $products_query->have_posts() ) { $products_query->the_post(); global $product; // 获取当前产品所属的所有默认产品类别 $product_categories = wp_get_post_terms( get_the_ID(), 'product_cat', array('fields' => 'all') ); foreach ( $product_categories as $category ) { // 按分类ID分组,确保同一个分类只出现一次 $grouped_products[$category->term_id]['name'] = $category->name; $grouped_products[$category->term_id]['products'][] = array( 'id' => get_the_ID(), 'title' => get_the_title(), 'permalink' => get_permalink() ); } } // 重置查询,避免影响后续页面内容 wp_reset_postdata(); } }
3. 渲染分组后的产品列表
最后把分组好的内容输出到页面上,按照「类别名称 + 该类别下产品列表」的形式展示:
if ( !empty($grouped_products) ) { foreach ( $grouped_products as $category_group ) { // 输出类别名称 echo '<h3 class="product-category-group-title">' . esc_html($category_group['name']) . '</h3>'; // 输出该类别下的产品列表 echo '<ul class="category-product-list">'; foreach ( $category_group['products'] as $product_item ) { echo '<li><a href="' . esc_url($product_item['permalink']) . '">' . esc_html($product_item['title']) . '</a></li>'; } echo '</ul>'; } } else { echo '<p class="no-products-found">没有找到属于该device分类的产品</p>'; }
4. 集成到你的模板中
你可以把这些代码放到主题的taxonomy-device.php模板文件里(如果没有这个文件,直接新建一个即可),这样用户访问device分类的归档页面时,就会自动按这个逻辑展示产品。
小提示
- 如果你的自定义分类法slug不是
device,记得把代码里的device替换成你实际的分类法slug - 可以修改
posts_per_page参数来限制每页显示的产品数量,或者添加orderby参数来调整产品排序 - 输出的HTML结构可以根据你的主题样式自定义类名,方便添加CSS美化展示效果
内容的提问来源于stack exchange,提问作者Mostafizur Rahman
相关产品推荐
相关产品推荐

