整个循环机制基于一个过滤的$posts数组。所以,看看里面The Loop documentation on multiple loops 它为您使用的标准循环代码提供了PHP解释:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!-- do stuff ... -->
<?php endwhile; ?>
<?php endif; ?>
have\\u posts()和\\u post()是全局$wp\\u查询对象的方便包装,所有操作都在该对象中。$wp\\u查询在blog标头中调用,并通过GET和PATH\\u INFO传入fed查询参数。$wp\\u查询接受参数并构建和执行一个DB查询,该查询将生成一个POST数组。此数组存储在对象中,并返回到日志标题所在的位置
stuffed into the global $posts array (for backward compatibility with old post loops). have\\u posts()只需调用$wp\\u query->have\\u posts(),它会检查循环计数器以查看post数组中是否还有帖子。\\u post()调用$wp\\u query->the\\u post(),这将推进循环计数器并设置全局$post变量以及所有全局post数据。完成循环后,have\\u posts()将返回false,我们就完成了。
因此,全局$posts连接到have\\u posts函数。为了正常工作,它只能包含分页的帖子列表。还要注意$posts数组只是为了向后兼容,所以最好不要直接访问它。
因此,看起来您要么设置自己的分页,要么创建一个包含所有帖子的单独对象。
我建议采用后者。