WordPress文章循环修改:前3篇输出后单独行展示剩余文章
实现方案
核心通过循环计数器标记文章序号,将前3篇和剩余文章分别包裹在独立的Bootstrap row 行容器中,同时修正原查询仅拉取3篇文章的限制:
- 初始化
$current_post_index计数器,每循环一篇文章计数+1 - 将原查询参数
posts_per_page=3修改为posts_per_page=-1拉取全部文章,如需限制总文章数量可将-1替换为对应数值 - 第一篇文章输出前打印第一行的起始标签,第3篇输出完成后自动闭合第一行
- 第4篇文章输出前先打印新行的起始标签,所有文章循环结束后统一闭合最后一个行容器
- 剩余文章的栅格类可按需调整,示例中使用
col-md-12占满整行,也可替换为col-md-6/col-md-4等类实现多列布局
修改后的完整代码如下:
<?php // posts_per_page=-1 表示拉取全部文章,需限制总数可替换为对应数字 $the_query = new WP_Query( 'posts_per_page=-1' ); $current_post_index = 0; // 初始化文章序号计数器 ?> <?php while ($the_query->have_posts()) : $the_query->the_post(); $current_post_index++; // 输出第一行起始标签 if ($current_post_index === 1) { echo '<div class="row">'; } // 第4篇开始时闭合上一行,开启新行 if ($current_post_index === 4) { echo '</div><div class="row mt-4">'; // mt-4为新行添加顶部外边距,可按需删除 } ?> <?php if ($current_post_index <= 3): // 前3篇使用col-md-4三列布局 ?> <div class="col-md-4"> <a href="<?php the_permalink() ?>"> <?php the_title(); ?> </a> <?php the_excerpt(__('(more…)')); ?> </div> <?php else: // 剩余文章可自行修改栅格类 ?> <div class="col-md-12 mb-3"> <a href="<?php the_permalink() ?>"> <?php the_title(); ?> </a> <?php the_excerpt(__('(more…)')); ?> </div> <?php endif; ?> <?php endwhile; // 闭合最后一个行容器 echo '</div>'; wp_reset_postdata(); ?>
兼容说明:如果总文章数不足3篇,代码会自动适配,不会出现HTML标签未闭合的问题。如果剩余文章需要多列布局,仅需修改else分支的col类名即可,Bootstrap的row容器会自动完成换行。
内容的提问来源于stack exchange,提问作者crad98
相关产品推荐
相关产品推荐

