WP_Query 加一行 no_found_rows,列表页快了不少

· wordpress · 阅读 3
摘要

一个 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。

这个坑挺低级的,但真会犯。