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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:50:01