这里的问题是,默认情况下,此查询具有分页,并且您所要求的是不可伸缩的。
例如,此查询一次获取5篇文章,并显示用户的第6页:
$user_query = new WP_User_Query( array(
\'number\' => 5,
\'offset\' => 25
) );
你可以通过
-1
获取无限用户,但这将导致其他问题。
还有paged
参数,您可以使用它来代替offset
保存一些计算
为什么你永远不应该要求所有的帖子用户同时显示3000个用户,这将是一项昂贵的操作,无论是获取数据还是显示数据。这是应该在WP CLI中执行的操作,应该分步骤执行,而不是一次完成所有操作
30次获取100个用户要比一次获取3000个用户有效得多。同样,添加分页也是有原因的,我强烈建议您使用它
您可以拥有任意数量的用户,只是不要试图同时显示所有用户,要合理。评论、页面、帖子和其他有3000条的内容也是如此。一个好的数字是50作为最大值。总是设置一个最大值,即使它是一个你永远不会想到的愚蠢的高最大值,并且总是尽可能选择分页或增量加载
其他因素包括可用内存不足、查询时间过长并达到最大执行时间,或者有很多人同时访问该页面。
您正在进行双重查询这是一个标准的用户查询:
$args = array( ... );
// The Query
$user_query = new WP_User_Query( $args );
// User Loop
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo \'<p>\' . $user->display_name . \'</p>\';
}
} else {
echo \'No users found.\';
}
请注意,一旦创建
$user_query
对象运行查询。但是你的代码会调用
$users = $user_query->get_results();
, 使其返回到数据库,并再次获取结果。你不需要打电话
get_results
内存和时间限制如图所示,这是在WP Cron上运行的,但这会导致出现问题。实际上,没有任何地方可以测试以可靠的方式返回20个用户或3000个用户。
例如,它可能会返回您期望的所有用户,但您只有时间在到达时间限制之前处理20个,因此它只显示为返回了20个。类似地,处理每个用户可能会花费太长时间,而您只有20个时间。
要了解这一点,请使用$user_query->get_total()
方法并将其存储在某处。
https://developer.wordpress.org/reference/classes/wp_user_query/get_total/
我建议切换到由真正的cron作业运行的WP CLI命令,这样时间限制就不再适用了,同时一次只处理50个,以避免内存限制,并进行增量处理,而不是一次完成所有操作。