这个问题适用于scale,与典型的blog实现无关。我正在开发一个web应用程序,运行标准WP\\U查询来获取一些自定义帖子类型。这通常会导致运行大约10个SQL查询。在循环中,我需要访问这两个post meta
对于岗位和user meta
这篇文章的作者。使用get_post_meta
在回路内部。WordPress缓存WP\\U查询的结果,因此每次“不进行”其他查询get_post_meta
在循环中调用。
然而,在为文章作者检索用户数据时,情况变得很糟糕。通常我需要打电话get_user_by
在循环中获取用户数据。问题来了。如果我使用WP_Query
获取50个帖子each by a different author
, 使命感get_user_by
循环内会产生100个SQL查询(每个用户有两个用于从中提取数据的查询users
表和usermeta
表)。这是我前面提到的10个SQL查询的补充。110 SQL查询!-这太疯狂了。
接下来,我想使用WP_User_Query
在循环运行之前获取用户数据。
$custom_query = new WP_Query($args);
foreach($custom_query->posts as $post) {
$post_authors[] = (int)$post->post_author;
}
$user_query = new WP_User_Query( array(\'include\' => $post_authors) );
我以为
WP_User_Query
像这样聪明
WP_Query
并减少查询数量。这确实将查询数量从之前的100个减少到了51个。一个查询命中
users
桌子
for all users
50个查询命中
usermeta
桌子
one for each user
. 更好,但不是我所期望的。
如何减少场景的查询?