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

如何按页面模板分组WordPress搜索结果并优先展示指定模板内容?

实现搜索结果分组展示的方案

这好办,我们可以把搜索结果拆成两组分别处理:先单独展示使用template-procedure-minimal模板的页面,再输出剩下的常规搜索结果。直接替换你现有循环部分的代码就行,完整代码如下:

<?php get_search_form(); ?>
<hr class="dotted">
<div id="search-results" class="marginbottom2">
    <?php
    // 先把所有搜索结果分成两组
    $procedure_posts = array();
    $remaining_posts = array();

    if (have_posts()) {
        // 遍历所有搜索结果,按模板分组
        while (have_posts()) {
            the_post();
            if (is_page_template('template-procedure-minimal')) {
                $procedure_posts[] = $post; // 存符合条件的帖子对象
            } else {
                $remaining_posts[] = $post; // 存剩下的帖子对象
            }
        }
        wp_reset_postdata(); // 重置查询状态

        // 第一组:展示使用template-procedure-minimal模板的页面
        if (!empty($procedure_posts)) {
            echo '<h2>流程页面</h2>'; // 这里的标题可以根据你的需求修改
            echo '<div class="procedure-results">';
            foreach ($procedure_posts as $post) {
                setup_postdata($post); // 激活当前帖子对象
                ?>
                <!-- 这里放你要输出的帖子内容结构,比如标题、摘要等 -->
                <article class="search-result-item">
                    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                    <?php the_excerpt(); ?>
                </article>
                <?php
            }
            echo '</div>';
            wp_reset_postdata(); // 再次重置
        }

        // 第二组:展示剩下的搜索结果
        if (!empty($remaining_posts)) {
            // 如果第一组有内容,可以加个分隔线
            if (!empty($procedure_posts)) {
                echo '<hr class="dotted">';
            }
            echo '<h2>其他搜索结果</h2>'; // 同样可以修改标题
            echo '<div class="remaining-results">';
            foreach ($remaining_posts as $post) {
                setup_postdata($post);
                ?>
                <!-- 这里放常规搜索结果的输出结构,和你原来的循环内容一致即可 -->
                <article class="search-result-item">
                    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                    <?php the_excerpt(); ?>
                </article>
                <?php
            }
            echo '</div>';
            wp_reset_postdata();
        }
    } else {
        // 没有搜索结果的情况,保留你原来的提示内容
        echo '<p>没有找到匹配的内容,请尝试其他关键词。</p>';
    }
    ?>
</div>

关键部分说明:

  • 我们先用while (have_posts())遍历所有搜索结果,把帖子对象按模板条件分到两个数组里,这样就能实现分组。
  • 用setup_postdata($post)来激活每个帖子对象,这样the_title()、the_permalink()这些模板标签才能正常工作。
  • 每次循环结束后记得调用wp_reset_postdata(),避免影响后续的查询或模板标签使用。
  • 你可以根据自己的需求修改分组的标题(比如把“流程页面”改成你业务对应的名称),以及帖子内容的输出结构(比如调整摘要、添加缩略图等)。

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:21:57