WordPress搜索结果去重展示自定义分类法company术语
解决自定义分类术语重复显示的问题
我明白你想要在搜索结果页新增一个区域,展示所有匹配项目里去重后的company分类术语,而不是每个项目单独输出一遍导致重复。现有代码的问题是在循环里逐个帖子输出术语,自然会出现重复项。下面是针对性的修改方案:
核心思路
- 先初始化一个空数组,专门用来存储收集到的唯一company术语
- 在遍历搜索结果的过程中,提取每个帖子的company术语,把唯一的术语加入数组
- 循环结束后,统一输出这个去重后的术语列表
修改后的完整代码
<?php // 初始化空数组,用术语slug做键实现自动去重 $unique_companies = array(); // 执行搜索查询 $search_query = new WP_Query( $args ); ?> <?php if ( $search_query->have_posts() ) : ?> <!-- 新增:去重后的companies展示区域 --> <div class="companies-section"> <h3>Related Companies</h3> <?php // 先遍历所有帖子,收集唯一的company术语 while ( $search_query->have_posts() ) : $search_query->the_post(); $companies = get_the_terms( get_the_ID(), 'companies' ); if ( $companies && ! is_wp_error( $companies ) ) { foreach ( $companies as $company ) { // 用slug作为数组键,确保同一个术语只存一次 $unique_companies[$company->slug] = $company->name; } } endwhile; // 重置查询指针,保证后续的结果列表能正常遍历 $search_query->rewind_posts(); // 输出去重后的术语 if ( ! empty( $unique_companies ) ) { echo '<span>Filter by: </span>' . implode( ', ', $unique_companies ); } ?> </div> <!-- 原搜索结果列表 --> <ul class="search-result"> <!-- pagination here --> <!-- 结果循环 --> <?php while ( $search_query->have_posts() ) : $search_query->the_post(); ?> <li> <?php echo get_the_term_list( get_the_ID(), 'companies', 'Discipline: ', ', ' ); ?> <!-- 可添加帖子标题、内容预览等其他元素 --> </li> <?php endwhile; ?> <!-- end of the loop --> <!-- pagination here --> </ul> <?php wp_reset_postdata(); ?> <?php else : ?> <p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p> <?php endif; ?>
关键细节说明
- 用
$company->slug作为数组键:因为slug是分类术语的唯一标识,这样能自动过滤掉重复的术语 $search_query->rewind_posts():因为我们提前遍历了一次查询收集术语,必须重置指针才能让后续的结果循环正常工作- 如果需要给术语添加跳转链接,可以把
implode换成foreach循环:foreach ( $unique_companies as $slug => $name ) { $term_url = get_term_link( $slug, 'companies' ); echo '<a href="' . esc_url( $term_url ) . '" class="company-tag">' . esc_html( $name ) . '</a>, '; }
这样就能实现你想要的效果:在搜索结果页展示所有匹配项目中去重后的company术语,不会出现重复啦!
内容的提问来源于stack exchange,提问作者Duggy G
相关产品推荐
相关产品推荐

