Wie erhält man ein Array von Benutzerrollen mit oder ohne eine bestimmte Fähigkeit?

Obwohl es eine dumme Aufgabe zu sein scheint, kann ich einfach keine Methode finden, um ein Array aller WordPress- Benutzerrollen zu erhalten , die keine spezifische Fähigkeit haben.

Mit der function unten bin ich in der Lage, alle verfügbaren Benutzerrollen zu bekommen, aber wie kann ich diese filtern, so dass ich nur die Benutzerrollen mit oder ohne eine bestimmte Fähigkeit zurückgeben kann, sagen wir, es ist die upload_files Fähigkeit? Wäre es machbar?

 function get_roles_that_cant_upload_files() { global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $available_roles = array(); $available_roles = $wp_roles->get_names(); return $available_roles; } 

Ich habe überall durch WordPress-Dokumente und das Internet nach einer richtigen WP-corefunktion gesucht, die nicht existiert, nicht einmal ein Filter.

Ich hatte gehofft, nur die Benutzerrollen ohne die upload_files Fähigkeit zu erhalten. Auf diese Weise würde ich ein Auswahlfeld innerhalb einer Plugin-Option mit einem Feed versehen und dann eine andere function für die ausgewählten Benutzerrollen festlegen.

Ich bin kein Entwickler, also habe ich ein paar “Hacks” ohne Erfolg ausprobiert. Es scheint, dass die Benutzerfunktionen in der Tabelle wp_options gespeichert sind. Das lässt mich darüber nachdenken, ob es möglich wäre, eine databaseabfrage durchzuführen, um diese Ergebnisse zu erhalten.

Irgendwelche Eingaben geschätzt.

Solutions Collecting From Web of "Wie erhält man ein Array von Benutzerrollen mit oder ohne eine bestimmte Fähigkeit?"

Versuche damit:

 function get_roles_that_cant($capability) { global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $available_roles_names = $wp_roles->get_names();//we get all roles names $available_roles_capable = array(); foreach ($available_roles_names as $role_key => $role_name) { //we iterate all the names $role_object = get_role( $role_key );//we get the Role Object $array_of_capabilities = $role_object->capabilities;//we get the array of capabilities for this role if(!isset($array_of_capabilities[$capability]) || $array_of_capabilities[$capability] == 0){ //we check if the upload_files capability is present, and if its present check if its 0 (FALSE in Php) $available_roles_capable[$role_key] = $role_name; //we populate the array of capable roles } } return $available_roles_capable; } 

Ich nahm Sie function und fügen Sie die Logik, um das Roll-Objekt zu erhalten und alle functionen für das Objekt zu erhalten und zu überprüfen, ob die Rolle diese Fähigkeit hat, auch ich machte es allgemein, so dass Sie senden können, welche Fähigkeit Sie überprüfen möchten, verwenden Sie es so :

 get_roles_that_cant('upload_files'); 

Es wird ein Array wie folgt zurückgegeben:

 Array ( [contributor] => Contributor [subscriber] => Subscriber ) 

Sie können also Ihre Dropdown-Werte mit dem $key des Arrays und der Optionszeichenfolge mit dem $key des Arrays festlegen.