我认为大多数分页问题源于对查询和模板加载过程的误解,这种误解发生在您在模板文件中执行代码之前。
当有人请求页面时:
WordPress解析请求并根据传入的URL决定其用途。例如,它是否是主根页面,是否以category
, 它是否匹配单个帖子的模式,是否有页码等。。在此过程中设置了正确的查询变量。
WordPress使用上一步中设置的查询变量在数据库上运行主查询。
WordPress查看主查询的结果,并确定它是成功的还是没有结果。如果成功,WordPress将为该类型的请求加载正确的模板,否则将加载404模板。
如果上述一切都按预期进行,那么现在您终于进入了模板。但是现在我们可以看到一个问题的根源——如果主查询没有结果,您将永远无法访问模板来运行自定义查询。该主查询与模板中的自定义查询没有关系。如果自定义查询在主查询中没有相应的页面,则该页码的结果是否与此无关。在这种情况下,答案是在主查询发生之前通过pre_get_posts
, 要进行该查询,请提供所需的结果,而不是在模板中运行另一个查询。
您在问题中提到的另一个选项是使用静态页面。这是与主查询相关的上述行为的例外情况-无论您在URL中设置了什么页码,静态页面都将返回单个页面的内容。这就是如何通过主查询解决404问题的方法。在这种情况下,您必须在使用下一篇/上一篇文章链接函数时引用正确的查询对象,正如Kaiser在回答中提到的那样。