it-swarm.com.de

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

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.

Wie kann ich die Liste am besten abrufen?

39
jerclarke

Rollen werden in der globalen Variablen $wp_roles gespeichert.

Die ideale Funktion ist get_editable_roles()from /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 Teil "editable" bietet anderen Plugins die Möglichkeit, die Liste zu filtern, falls eine andere Person als der Administrator über die Berechtigung 'edit_users' verfügt (und daher "admin" aus der Liste entfernt werden muss, da der Benutzer dies sonst könnte) machen sich admin). Rollenverwaltungs-Plugins, die zum Erstellen benutzerdefinierter Rollen verwendet werden, verwenden diesen Filter. Ansonsten ist diese Funktion im Wesentlichen get_roles()was nicht existiert).

Vermutlich bietet Ihr Plugin die fragliche Einstellungsseite nur für Personen mit Administratorrechten wie 'manage_options' an und ist im Grunde genommen ein Administrator mit Zugriff auf alle Rollen. Der Filter sollte Sie also nicht beeinträchtigen.

Es gibt auch wp_dropdown_roles(), mit dem Sie die 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 ).

45
jerclarke

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 :)

12
Rarst

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ľ
        )
)
0
Jasom Dotnet

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

0
Manuel Costales