web-dev-qa-db-fra.com

Comment obtenir un tableau de rôles d'utilisateur avec ou sans capacité spécifique?

Bien que cela puisse sembler une tâche idiote, je ne peux tout simplement pas trouver une méthode pour obtenir un tableau de tous les rôles WordPress des utilisateurs qui n’ont pas de capacité spécifique.

Avec la fonction ci-dessous, je peux obtenir tous les rôles d'utilisateur disponibles, mais comment puis-je les filtrer pour ne pouvoir renvoyer que les rôles d'utilisateur avec ou sans capacité spécifique, supposons qu'il s'agisse de la capacité upload_files? Serait-ce faisable?

function get_roles_that_cant_upload_files() {
    global $wp_roles;

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

    $available_roles = array();

    $available_roles = $wp_roles->get_names();

    return $available_roles;
}

J'ai cherché partout dans la documentation WordPress et sur le Web une fonction de base WP propre, qui semble ne pas exister, pas même un filtre.

J'espérais obtenir uniquement les rôles d'utilisateur sans la capacité upload_files. Ce faisant, je l’utiliserais pour alimenter un champ de sélection dans les options d’un plug-in, puis je définirais une autre fonctionnalité pour les rôles d’utilisateur sélectionnés.

Je ne suis pas un développeur, j'ai donc essayé quelques "hacks" sans succès. Il semble que les capacités de l'utilisateur soient stockées dans la table wp_options. Cela me fait penser s'il serait possible d'effectuer une requête dans la base de données afin d'obtenir ces résultats.

Toutes les entrées appréciées.

1
Adriano Monecchi

Essayez avec ceci:

function get_roles_that_cant($capability) {
    global $wp_roles;

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

    $available_roles_names = $wp_roles->get_names();//we get all roles names

    $available_roles_capable = array();
    foreach ($available_roles_names as $role_key => $role_name) { //we iterate all the names
        $role_object = get_role( $role_key );//we get the Role Object
        $array_of_capabilities = $role_object->capabilities;//we get the array of capabilities for this role
        if(!isset($array_of_capabilities[$capability]) || $array_of_capabilities[$capability] == 0){ //we check if the upload_files capability is present, and if its present check if its 0 (FALSE in Php)
            $available_roles_capable[$role_key] = $role_name; //we populate the array of capable roles
        }
    }
    return $available_roles_capable;
}

je vous ai pris la fonction et ajouter la logique pour obtenir l'objet rol et obtenir toutes les capacités pour cet objet et de vérifier si le ROL a cette capacité, aussi je l'ai généralisé afin que vous puissiez envoyer quelle capacité vous voulez vérifier, utilisez-le comme ceci:

get_roles_that_cant('upload_files');

il retournera un tableau comme ceci:

Array
(
    [contributor] => Contributor
    [subscriber] => Subscriber
)

afin que vous puissiez faire vos valeurs de liste déroulante en utilisant le $key du tableau et la chaîne d'option en utilisant le $value du tableau.

1
David Lee