求助:自定义WordPress+GEOmyWP搜索结果模板循环逻辑
GEOmyWP自定义搜索结果:优先展示Pro分类帖子解决方案
要实现先显示分类法paket下带pro标签的帖子,再显示其他内容,不能直接在原循环里做判断(会导致pro帖子穿插在结果中),正确做法是先把查询结果分成两组,再分别循环展示:
完整代码示例
<?php // 初始化两个数组,分别存储Pro帖子和普通帖子 $pro_posts = []; $regular_posts = []; // 第一次遍历查询结果,完成分组 while ( $gmw_query->have_posts() ) : $gmw_query->the_post(); // 检查当前帖子是否属于paket分类下的pro术语 if ( has_term( 'pro', 'paket' ) ) { $pro_posts[] = $post; } else { $regular_posts[] = $post; } endwhile; // 重置查询状态,避免后续模板标签冲突 wp_reset_postdata(); // 优先循环展示Pro帖子 foreach ( $pro_posts as $post ) : setup_postdata( $post ); ?> <!-- 这里替换成你的Pro帖子模板代码 --> <article class="search-result pro-result"> <h2><?php the_title(); ?></h2> <div class="post-content"><?php the_excerpt(); ?></div> <!-- 显示GEOmyWP距离信息 --> <div class="distance"><?php gmw_distance_output( $gmw_query ); ?></div> </article> <?php endforeach; // 再循环展示普通帖子 foreach ( $regular_posts as $post ) : setup_postdata( $post ); ?> <!-- 这里替换成你的普通帖子模板代码 --> <article class="search-result regular-result"> <h2><?php the_title(); ?></h2> <div class="post-content"><?php the_excerpt(); ?></div> <!-- 显示GEOmyWP距离信息 --> <div class="distance"><?php gmw_distance_output( $gmw_query ); ?></div> </article> <?php endforeach; // 最终重置帖子数据 wp_reset_postdata(); ?>
关键说明
- 分组逻辑:通过
has_term('pro', 'paket')判断帖子是否属于目标分类术语,将结果拆分为两个数组,确保Pro帖子能集中展示在前面。 - 模板标签兼容:每次循环前调用
setup_postdata($post),保证the_title()、the_excerpt()等WordPress原生模板标签正常工作。 - GEOmyWP功能保留:如果需要显示距离、地址等插件自带信息,直接使用
gmw_distance_output()这类插件函数即可,不受分组影响。
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

