在主题开发中,理解主查询和自定义查询的区别,是避免分页错乱和性能问题的关键。

主查询是什么

主查询是 WordPress 根据当前 URL 自动执行的查询。当你访问一个分类归档页时,WordPress 已经执行了一个查询来获取该分类下的文章,并自动处理了分页逻辑。主查询的结果存储在全局变量 wp_query 中,模板循环直接使用它。

什么时候应该使用主查询

当你在构建归档类模板时,包括文章类型归档、分类法归档、搜索结果页,应该直接使用主查询,而不是重新创建一个 WP_Query。主查询已经正确处理了分页、文章数量和路由逻辑。如果你在归档模板中新建查询,分页链接会失效,因为分页是基于主查询计算的。

什么时候应该使用自定义查询

自定义查询适合显示与当前页面无关的特定内容。比如在首页显示最新 3 篇文章,在文章底部显示相关文章,在侧边栏显示热门产品。这些场景中,内容的选择逻辑是固定的,不依赖于当前 URL。

自定义查询的正确写法

使用 WP_Query 创建自定义查询后,必须调用 wp_reset_postdata 恢复全局文章数据。否则后续的模板代码可能使用错误的文章上下文。对于简单的查询,get_posts 是更轻量的选择,它默认不计算分页总数,性能更好。

性能注意事项

每个页面中自定义查询的数量应该控制在合理范围内。如果一个页面需要多个不同条件的内容列表,考虑合并查询或使用缓存。避免在循环内部再次执行查询,这会导致 N+1 查询问题。