Advertisements

count_users

Definition:
function count_users($strategy = 'time') {}

Count number of users who have each of the user roles.
Assumes there are neither duplicated nor orphaned capabilities meta_values. Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query() Using $strategy = ‘time’ this is CPU-intensive and should handle around 10^7 users. Using $strategy = ‘memory’ this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257.

Parameters

  • string $strategy: ‘time’ or ‘memory’

Return values

returns:Includes a grand total and an array of counts indexed by role strings.

Source code

function count_users($strategy = 'time') {

	global $wpdb, $wp_roles;



	// Initialize

	$id = get_current_blog_id();

	$blog_prefix = $wpdb->get_blog_prefix($id);

	$result = array();



	if ( 'time' == $strategy ) {

		global $wp_roles;



		if ( ! isset( $wp_roles ) )

			$wp_roles = new WP_Roles();



		$avail_roles = $wp_roles->get_names();



		// Build a CPU-intensive query that will return concise information.

		$select_count = array();

		foreach ( $avail_roles as $this_role => $name ) {

			$select_count[] = "COUNT(NULLIF(`meta_value` LIKE '%" . like_escape($this_role) . "%', FALSE))";

		}

		$select_count = implode(', ', $select_count);



		// Add the meta_value index to the selection list, then run the query.

		$row = $wpdb->get_row( "SELECT $select_count, COUNT(*) FROM $wpdb->usermeta WHERE meta_key = '{$blog_prefix}capabilities'", ARRAY_N );



		// Run the previous loop again to associate results with role names.

		$col = 0;

		$role_counts = array();

		foreach ( $avail_roles as $this_role => $name ) {

			$count = (int) $row[$col++];

			if ($count > 0) {

				$role_counts[$this_role] = $count;

			}

		}



		// Get the meta_value index from the end of the result set.

		$total_users = (int) $row[$col];



		$result['total_users'] = $total_users;

		$result['avail_roles'] =& $role_counts;

	} else {

736

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: