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>';
}else{
$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