Erhalten Sie eine Liste der aktuell verfügbaren Rollen auf einer WordPress-Site?

38

Beim Schreiben von WordPress-Plugins müssen häufig Optionen eingerichtet werden, für die Rollen auf der Site Zugriff auf bestimmte Funktionen oder Inhalte haben. Dazu muss ein Plug-in-Entwickler die Liste der Rollen abrufen, die auf der Site vorhanden sind, um sie in der Option zu verwenden. Da benutzerdefinierte Rollen erstellt werden können, können wir nicht davon ausgehen, dass nur die Standardrollen verfügbar sind.

Was ist der beste Weg, um die Liste abzurufen?

Jerclarke
quelle
6
Hinweis: Diese Frage wurde ursprünglich von Ryan Bilesky auf der wp-hacker-Mailingliste gestellt und von mir beantwortet. Ich fügte es hier hinzu, weil es ein klarer Fall von Best-Practice-Frage ist, den die Leute Google stellen könnten :)
Jerclarke
1
Hey @ Jeremy Clarke - Ich freue mich sehr über Ihre Teilnahme hier und genau diese Art von Dingen suchen wir hier. Antworten auf häufig gestellte Fragen, die auch Best Practices aufzeigen können. Ein dickes Lob!
MikeSchinkel

Antworten:

47

Rollen werden in der globalen Variablen gespeichert $wp_roles.

Die ideale Funktion kommtget_editable_roles() von/wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

Der "bearbeitbare" Teil ist, weil er anderen Plugins die Möglichkeit bietet, die Liste zu filtern, falls eine andere Person als der Administrator die 'edit_users'Berechtigung hat (und daher "admin" aus der Liste entfernt werden muss, damit sich der Benutzer selbst zum Administrator machen kann). Rollenverwaltungs-Plug-ins, die zum Erstellen benutzerdefinierter Rollen verwendet werden, verwenden diesen Filter. Ansonsten ist diese Funktion im Wesentlichen get_roles() (was nicht existiert) .

Vermutlich wird Ihr Plugin die betreffende Einstellungsseite nur für Personen anbieten, die über Administratorrechte verfügen 'manage_options'und im Grunde genommen über Administratorrechte für alle Rollen verfügen. Der Filter sollte Sie also nicht beeinträchtigen.

Dort findenwp_dropdown_roles() Sie auch Rollen als <option>Felder für eine <select>Liste (obwohl Ankreuzfelder in vielen Szenarien, in denen Sie auswählen, wer Zugriff auf etwas hat, wahrscheinlich besser funktionieren) .

Jerclarke
quelle
3
Hinweis: Ich habe diese Funktion als Teil eines Patches erstellt, um WP sicherer zu machen, daher bin ich voreingenommen;)
jerclarke
14

Versuche dies:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PS heh, diese Erklärung verpasst und mir zu schnell geantwortet :)

Rarst
quelle
0

So finden Sie die Liste der Rollen ohne Plugins oder Funktionen: http://screencast.com/t/uaWsGLAR3Sh

Manuel Costales
quelle
6
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert.
Gabriel
0

Für diejenigen, die mehrsprachige Website haben, funktionieren

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

gibt ein lokalisiertes Array wie folgt zurück (Rollennamen sind in slowakischer Sprache):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)
Jasom Dotnet
quelle
0

Auf diese Weise erhalten Sie ein Array aller vorhandenen Benutzerrollen und der Funktionen für jede Rolle in WordPress. Wenn Sie es nicht auf dem Bildschirm ausdrucken möchten, lassen Sie die letzte Zeile aus. Die Variable $ rolls in Zeile 2 enthält eine Reihe von Benutzern und Funktionen, sodass Sie sie nach Bedarf verwenden können. Unten finden Sie ein Beispiel für das zurückgegebene Array.

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Nuno Sarmento
quelle