我想分页通过所有用户在一个可湿性粉剂网站在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”参数,但我在使用它时得到了相同的结果。
以前有人见过这样的吗?
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的解决方案。