GET_USERS丢失或跳过循环中的用户

时间:2020-12-14 作者:Colin

我想分页通过所有用户在一个可湿性粉剂网站在100组。以下代码是简化版本:

for($offset = 0; $offset < 100; $offset++)

    $args = ["number" => 100, \'orderby\' => \'ID\'];

    $args[\'offset\'] = ($offset - 1) * (int) $args[\'number\'];

    $users = get_users($args);
    
    //Do Stuff with $users
   
}
问题是我似乎跳过了一些用户。我已经从循环中记录了用户ID,并对照仪表板中的用户部分进行了检查,我可以找到没有出现在日志中但确实出现在用户中的用户ID。

我知道还有一个“paged”参数,但我在使用它时得到了相同的结果。

以前有人见过这样的吗?

2 个回复
SO网友:Tom J Nowell

您的问题是一个基本的PHP问题。你只在偶数上循环,0,2,4,6

这是因为在每个循环结束时$offset 增加1:

for($offset = 0; $offset < 100; $offset++)
但由于某种原因,它在循环结束之前也会增加:

$offset++;
所以偏移量增加2,跳过一半的值

SO网友:Colin

我们多次运行此代码,但无法缩小范围。我们假设这是由托管公司中的一些自定义缓存或SQL限制机制造成的,因为用户表非常大(14k条记录),或者另一个插件正在挂接get\\u User/DB查询。

我们最终编写了一个基于用户ID的原始查询:

$users = $wpdb->get_results("SELECT ID FROM $wpdb->users WHERE ID > $maxUserId ORDER BY ID ASC LIMIT 50");
其中$maxUserId是我们在每次运行后存储的变量,它存储给定结果集中看到的最高用户ID。因此,在每次运行时,我们都会得到下一批有效分页的用户ID。

这不是一个好的解决方案,但对于这个给定的用例,它是我们找到的唯一一个可以保证我们看到数据库中每个用户ID的解决方案。

相关推荐

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

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