这个问题适用于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. 更好,但不是我所期望的。
如何减少场景的查询?