下面是我对这个问题的评论,下面是解决问题的例子。
默认功能get_users
要获取每个站点的所有用户,请在单个或多个站点区域上工作。但在多站点网络中,要从每个站点获得所有用户,切换到每个站点是很重要的。下面的示例演示了这一点。
// Multisite
// get sites in the Multisite network
$sites = wp_get_sites();
// Switch in each Site
foreach( $sites as $site ) {
switch_to_blog( $site[ \'blog_id\' ] );
// Get Users of each site
var_dump( count( get_users() ) );
restore_current_blog();
}
上面的代码获取计数(
count()
) 网络每个站点中的所有用户。
如果您在网络的单个站点中,那么get_users()
足以获取此网站的所有用户。函数使用WordPress全局$GLOBALS[\'blog_id\']
在其ID上标识站点。
自定义要求的备选方案
如果该功能没有帮助,请使用
WP_User_Query
满足您的要求。该类为您提供了许多获取每个站点中的用户数据的可能性。还可以使用
switch_to_blog()
切换多站点的每个站点。请参见
codex 有关有用的提示、参数和示例源。
小提示,功能get_users
是一种易于使用的包装WP_User_Query
-班
多站点提示可以从网络中的另一个博客获取数据,也可以在同一个多站点安装上从另一个博客获取数据。有些人使用SQL命令来实现这一点,但这可能很慢,而且容易出错。
虽然这是一个固有的昂贵操作,但您可以使用switch\\u to\\u blog和restore_current_blog
在使用标准WordPress API的同时,使其更简单。
switch_to_blog( $blog_id );
// Do something
restore_current_blog();
restore_current_blog
撤消对的最后调用
switch_to_blog
, 但只有一步,调用才是不可嵌套的,所以始终调用
restore_current_blog
通话前
switch_to_blog
再一次
大型网络可以在网络中列出博客,但这是一件昂贵的事情。默认情况下,网络的WordPress计数为10000个站点。如果要更改此值,请参阅下面的源代码。
add_filter( \'wp_is_large_network\', function( $is_large, $type, $count ) {
if ( ! $is_large )
return $is_large;
// $type can be \'sites\' or \'users\'
if ( \'sites\' !== $type )
return $is_large;
// Default is 10000, we add one 0
return $count > 100000;
}, 10, 3 );
可以使用
wp_get_sites( $args )
功能,自WordPress 3.7版起可用。该函数接受一个参数数组,指定要查找的站点类型。
此功能的限制为100个站点。如果网络更大,则必须通过函数上的参数更改此值。
缓存功能wp_get_sites( $args )
自3.7版以来一直在内核中,但没有缓存。如果经常使用,请在缓存中转换结果,如WP_Cache
或瞬态。
缓存get_users()
结果,速度更快。