假设不存在重复或孤立的功能meta_values。
假设角色名称是唯一的短语。WP_User_Query::prepare_Query()使用$strategy='time'做了相同的假设,这是CPU密集型的,应该可以处理大约10^7个用户。
使用$strategy='memory'这是内存密集型的,应该可以处理大约10^5个用户,但请参阅WP Bug#12257。
$策略
一串可选择的计算用户时使用的计算策略。
接受其中之一“时间”
或“内存”
.默认值“时间”
.
违约:“时间”
$站点id
整数|无效的可选择的要计算用户数的站点ID。默认为当前站点。
违约:无效的
阵列用户计数。
total_users(用户总数)
整数网站上的用户总数。
可用角色(_R)
整数[]按用户角色键入的用户计数数组。
函数count_users($strategy='time',$site_id=null){全局$wpdb;//初始化。if(!$site_id){$site_id=get_current_blog_id();}/***在运行查询之前过滤用户计数。**返回一个非空值以使count_users()提前返回。**@自5.1.0起**@param null | array$result要返回的值。默认为null以继续查询。*@param string$strategy可选。计算用户时使用的计算策略。*接受“时间”或“内存”。默认“时间”。*@param int$site_id要为其计算用户数的站点id。*/$pre=apply_filters('pre_count_users',null,$strategy,$site_id);if(null!==$pre){返回$pre;}$blog_prefix=$wpdb->get_blog_prefix($site_id);$result=数组();if(“时间”===$strategy){if(is_multisite()&&get_current_blog_id()!=$站点id){switch_to_blog($site_id);$availary_roles=wp_roles()->获取名称();恢复当前日志();}其他{$avail_roles=wp_roles()->获取名称();}//构建一个CPU密集型查询,它将返回简明的信息。$select_count=数组();foreach($avail_roles作为$this_role=>$name){$select_count[]=$wpdb->prepare('count(NULLIF(`meta_value`LIKE%s,false))',“%”$wpdb->esc_like(“”.$this_role.“”).'%');}$select_count[]=“count(NULLIF(`meta_value`='a:0:{}',false)”;$select_count=内爆(',',$select-count);//将meta_value索引添加到选择列表,然后运行查询。$row=$wpdb->get_row("选择{$SELECT_count},计数(*)来自{$wpdb->usermeta}内部联接{$wpdb->users}ON user_id=idWHERE meta_key=“{$blog_prefix}功能”",阵列_N);//再次运行前一个循环,将结果与角色名称关联。$col=0;$role_counts=数组();foreach($availal_roles作为$this_role=>$name){$count=(int)$row[$col++];如果($count>0){$role_counts[$this_role]=$count;}}$role_counts['none']=(int)$row[$col++];//从结果集的末尾获取meta_value索引。$total_users=(int)$row[$col];$result['total_users']=$total_users;$result['avail_roles']=&$role_counts;}其他{$avail_roles=数组(“无”=>0,);$users_of_blog=$wpdb->get_col("选择元值(_V)来自{$wpdb->usermeta}内部联接{$wpdb->users}ON user_id=idWHERE meta_key=“{$blog_prefix}功能”");foreach($users_of_blog为$caps_meta){$b_roles=可以取消序列化($caps_meta);if(!is_array($b_roles)){继续;}if(空($b_roles)){++$avail_roles['none'];}foreach($b_roles作为$b_角色=>$val){if(isset($avail_roles[$b_role]){++$可用角色[$b_role];}其他{$avail_roles[$b_role]=1;}}}$result['total_users']=计数($users_of_blog);$result['avail_roles']=&$avail_rores;}返回$result;}
查看所有引用 在Trac上查看 在GitHub上查看