WordPress get user dropdown by role

We needed a function to get a user selectbox by the user role. Instead of using the native wordpress function wp_dropdown_users() to get a list of all users we decided to create our own.

This function allows you to easily create a dropdown based on the user role.

function getUsersByRole($role,$name,$selected = '',$extra = '') {
global $wpdb;

	  $wp_user_search = new WP_User_Query(array("role"=> $role));
   	  $role_data = $wp_user_search->get_results();
		 foreach($role_data  as $item){
			 $role_data_ids[] = $item->ID;

	  $ids = implode(',', $role_data_ids);
	  $r = $wpdb->get_results("SELECT *   from ".$wpdb->prefix . "users where id IN(".$ids .")", ARRAY_A);

	  $content .='<select name="'.$name.'" id="'.$name.'" '.$extra.'>';

	  if($selected == ''){
			$content .='<option value="" selected="selected">Choose a user</option>';
				$r_user = $wpdb->get_results("SELECT *   from ".$wpdb->prefix . "users where ID = ".$selected."", ARRAY_A);
				$content .='<option value="'.$selected.'" selected="selected">'.stripslashes($r_user[0]['display_name']).'</option>';

	  for($i=0; $i<count($r); $i++){		  	
	  $content .='<option value="'.$r[$i]['ID'].'">'.stripslashes($r[$i]['display_name']).'</option>';
	  $content .='</select>';

	  return $content;

Now to use this function in your plugin do the following:

// the first field is the user role
// the second field is the name and id attributes for the selectbox
//the third field is optional and will allow you to set a selected state
// the fourth field optional is any special attributes you want to add into the select for instance an on change

echo getUsersByRole('subscriber','user_id', $r[0]['user_id'],'onchange="dosomething()"');

// or just use which will not set a default selected user or any extra attributes
echo getUsersByRole('subscriber','user_id');

If you have any questions please ask, this also works with the role editor plugin. (great for custom roles!)

Recent Posts

Leave a Comment