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

38

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 ce faire, 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?

jerclarke
la source
6
Remarque: cette question a été posée à l'origine par Ryan Bilesky sur la liste de diffusion wp-hackers et ma réponse a été fournie. Je l'ai ajouté ici car il s'agit clairement d'un cas de meilleure pratique que les gens pourraient demander à Google :)
jerclarke
1
Hey @Jeremy Clarke - Nous sommes vraiment heureux d’avoir votre participation ici et c’est exactement le genre de choses que nous recherchons ici; réponses liées à des questions courantes pouvant également révéler les meilleures pratiques. Gloire!
MikeSchinkel le

Réponses:

47

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

La fonction idéale estget_editable_roles() de/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 "éditable" vient du fait qu’elle offre la possibilité à d’autres plugins de filtrer la liste au cas où une personne autre que l’administrateur aurait le 'edit_users'privilège (par conséquent, il faudrait supprimer "admin" de la liste, sans quoi cet utilisateur pourrait se faire administrer). Les plug-ins 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() (ce qui n'existe pas) .

Vraisemblablement, votre plugin ne proposera la page de paramètres en question qu’à une personne disposant de fonctionnalités de niveau administrateur, telle qu’elle 'manage_options'est essentiellement un administrateur ayant accès à tous les rôles; le filtre ne devrait donc pas vous affecter.

Il existe également deswp_dropdown_roles() options qui vous donnent les rôles en tant que <option>champs pour une <select>liste (bien que les cases à cocher fonctionnent probablement mieux dans de nombreux scénarios dans lesquels vous choisissez qui a accès à quelque chose) .

jerclarke
la source
3
Note: J'ai créé cette fonction dans le cadre d'un patch pour rendre WP plus sûr, alors je suis partial en sa faveur;)
jerclarke
14

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 cette réponse, trop vite moi :)

Rarst
la source
0

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

Manuel Costales
la source
6
Bien que ce lien puisse répondre à la question, il est préférable d’inclure ici les parties essentielles de la réponse et de fournir le lien pour référence. Les réponses avec lien uniquement peuvent devenir non valides si la page liée est modifiée.
Gabriel le
0

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

Voici comment obtenir un tableau de tous les rôles utilisateur existants et des fonctionnalités pour chaque rôle dans WordPress. Si vous ne voulez pas l’imprimer à l’écran, omettez la dernière ligne. La variable $ roles sur la ligne 2 contiendra le tableau des utilisateurs et des fonctionnalités afin que vous puissiez l'utiliser comme vous le souhaitez. Voir ci-dessous pour un exemple du tableau retourné.

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

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