count_users数(一串 $策略 = “时间”,int |空 $站点id = 无效的 ):阵列

统计拥有每个用户角色的用户数。

描述

假设不存在重复或孤立的功能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;}

挂钩

应用筛选器('预计数用户',null |数组 $结果,一串 $策略,整数 $站点id )

在运行查询之前过滤用户计数。

变更日志

版本描述
4.9.0这个$站点id添加了参数以支持多站点。
4.4.0没有角色的用户数量现在包含在没有人元素。
3.0.0介绍。

用户贡献的笔记

  1. 跳到注释2内容

    基本示例

    调用count_users返回每个角色的用户数。它不会返回任何count==0的角色,因此结果将用于foreach循环。

    $result=count_users();echo“有”,$result['total_users'],“总用户”;foreach($result['avail_roles']作为$role=>$count)echo“,”,$count,“are”,$role,“s”;echo“.”;

    输出示例为:

    总共有199个用户,11个是管理员,4个是贡献者。

你必须登录在能够发表注释或反馈之前。