WP_Query 加一行 no_found_rows,列表页快了不少
摘要
一个 WordPress 站,首页有个「最新文章」区块只放 5 条,没有翻页。我在 WP_Query 里加了个参数,页面查询数从四十多次掉到个位数。 多出来的那次 COUNT(*) 默认情况下 WP_Query 会额外跑一条 SELECT
一个 WordPress 站,首页有个「最新文章」区块只放 5 条,没有翻页。我在 WP_Query 里加了个参数,页面查询数从四十多次掉到个位数。
多出来的那次 COUNT(*)
默认情况下 WP_Query 会额外跑一条 SELECT FOUND_ROWS(),目的是算总条数给分页用。可我这个区块根本不翻页——算它干嘛。
$latest = new WP_Query( [
'post_type' => 'post',
'posts_per_page' => 5,
'no_found_rows' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
] );
后两个参数要看情况
update_post_meta_cache 和 update_post_term_cache 关掉之后,循环里如果还要取自定义字段或分类,就会变成每篇一次查询,反而更慢。我只在「纯标题 + 日期」的区块里关,别的地方照样开着。
最要紧的一点:no_found_rows 打开以后 $latest->found_posts 和 max_num_pages 都是废的。所以它只能用在不需要分页的地方。我一开始图省事,把它套到分类归档模板上,结果分页直接没了,翻到第二页 404。
这个坑挺低级的,但真会犯。
2026年10月21日 11:39
前后30天 · 点日期看归档
9月21日
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日
11月6日
11月7日
11月8日
11月9日
11月10日
11月11日
11月12日
11月13日
11月14日
11月15日
11月16日
11月17日
11月18日
11月19日
11月20日