web-dev-qa-db-fra.com

Obtenir une liste des rôles actuellement disponibles sur un site WordPress?

Lors de l'écriture de plugins WordPress, il est souvent nécessaire de définir des options pour les rôles du site qui ont accès à certaines fonctionnalités ou contenus. Pour cela, un développeur de plug-in doit extraire la liste des rôles existants sur le site à utiliser dans l'option. Étant donné que des rôles personnalisés peuvent être créés, nous ne pouvons pas supposer que les rôles par défaut sont les seuls disponibles.

Quel est le meilleur moyen de récupérer la liste?

39
jerclarke

Les rôles sont stockés dans la variable globale $wp_roles.

La fonction idéale est 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;
}

La partie "editable" est parce qu’elle offre la possibilité à d’autres plugins de filtrer la liste au cas où une personne autre que l’administrateur aurait le privilège 'edit_users' (et que "admin" doit donc être supprimé de la liste, sinon cet utilisateur pourrait se faire admin). Les plugins de gestion de rôles utilisés pour créer des rôles personnalisés sont ceux qui utiliseraient ce filtre. Sinon, cette fonction est essentiellement get_roles()(qui n'existe pas)} _.

Vraisemblablement, votre plugin n'offrira la page de paramètres en question qu'à une personne disposant de fonctionnalités de niveau administrateur, comme 'manage_options', et qui est fondamentalement un administrateur ayant accès à tous les rôles. Le filtre ne devrait donc pas vous affecter.

Il existe également wp_dropdown_roles()qui vous donne les rôles en tant que champs <option> pour une liste <select>(bien que les cases à cocher fonctionnent probablement mieux dans de nombreux cas où vous choisissez qui a accès à quelque chose) ).

45
jerclarke

Essaye ça:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, j'ai raté cette explication et ma réponse, trop vite moi :)

12
Rarst

Pour ceux qui ont un site multilingue, fonction

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;
}

retourne un tableau localisé comme ceci (les noms de rôle sont en slovaque):

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

Voici comment vous pouvez trouver la liste des rôles sans plug-in ni fonction - http://screencast.com/t/uaWsGLAR3Sh

0
Manuel Costales