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

WordPress搜索结果去重展示自定义分类法company术语

解决自定义分类术语重复显示的问题

我明白你想要在搜索结果页新增一个区域,展示所有匹配项目里去重后的company分类术语,而不是每个项目单独输出一遍导致重复。现有代码的问题是在循环里逐个帖子输出术语,自然会出现重复项。下面是针对性的修改方案:

核心思路

  1. 先初始化一个空数组,专门用来存储收集到的唯一company术语
  2. 在遍历搜索结果的过程中,提取每个帖子的company术语,把唯一的术语加入数组
  3. 循环结束后,统一输出这个去重后的术语列表

修改后的完整代码

<?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:27