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

36

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. Les rôles personnalisés pouvant ê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?

    
posée jerclarke 11.09.2010 - 21:38
la source

4 réponses

43

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

La fonction idéale est get_editable_roles() à partir 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 "editable" tient au fait 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 qu’il faudrait donc supprimer «admin» de la liste d’adresses. 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) .

Votre plug-in ne proposera vraisemblablement que la page de paramètres en question à une personne disposant de fonctionnalités de niveau administrateur telles que 'manage_options' . Il s'agit en réalité d'un administrateur ayant accès à tous les rôles. Le filtre ne devrait donc pas vous affecter.

Il existe également un wp_dropdown_roles() qui vous donne les rôles sous <option> fields pour une liste <select> (bien que les cases à cocher fonctionnent probablement mieux dans de nombreux scénarios dans lesquels vous choisissez qui a accès à quelque chose) .

    
réponse donnée jerclarke 11.09.2010 - 21:41
la source
11

Essayez ceci:

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

    
réponse donnée Rarst 11.09.2010 - 21:47
la source
0

Voici comment trouver la liste des rôles sans plug-in ni fonction enlace

    
réponse donnée Manuel Costales 26.01.2016 - 21:47
la source
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ľ
        )
)
    
réponse donnée Jasom Dotnet 25.05.2016 - 12:58
la source

Lire d'autres questions sur les étiquettes