WP_USER_QUERY无法一次检索所有用户

时间:2017-09-27 作者:Vishal Tanna

我有3000多个角色为“subscriber”的用户,现在我想获取所有角色为“subscriber”的用户。

$user_query = new WP_User_Query( array( \'role\' => \'Subscriber\' ) );
$users = $user_query->get_results();

foreach( $users as $user)
{
     // getting user data
}
现在,当我尝试使用上述代码时,我的页面不起作用,它会给我500个HTTP错误,表示“无法处理请求”,所以我需要在代码中更改什么,以便一次给我所有用户。

但当我尝试使用下面的代码时,它运行得非常好。

$user_query = new WP_User_Query( array( \'role\' => \'Subscriber\',\'number\' => 200 ) );
但每次它都会返回前20个具有“订阅者”角色的用户。

提前感谢

2 个回复
SO网友:Tom J Nowell

这里的问题是,默认情况下,此查询具有分页,并且您所要求的是不可伸缩的。

例如,此查询一次获取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个,以避免内存限制,并进行增量处理,而不是一次完成所有操作。

SO网友:Kuliraj

这将返回并循环通过所有订阅者。

$users = get_users( array(
    \'role\' => \'subscriber\',
) );

if ( ! empty( $users ) ) {
    foreach( $users as $user ) {
        // getting user data
    }
}

https://codex.wordpress.org/Function_Reference/get_users

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post