web-dev-qa-db-fra.com

Supprimez admin ET éditeur du menu "changer le rôle en" dans la liste des utilisateurs.

J'ai un extrait de mon fichier functions.php qui supprime le rôle d'administrateur du menu déroulant "changer de rôle en" de l'écran de liste d'utilisateurs, de sorte que les éditeurs pouvant répertorier des utilisateurs et gérer des rôles ne puissent pas transformer un autre utilisateur en un admin. Le code ci-dessous fonctionne parfaitement.

function isa_pre_user_query($user_search) {
$user = wp_get_current_user();
  if (!current_user_can('administrator')) { // Is Not Administrator - Remove Administrator
    global $wpdb;

$user_search->query_where =
    str_replace('WHERE 1=1',
        "WHERE 1=1 AND {$wpdb->users}.ID IN (
             SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta
                WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
                AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%')",
        $user_search->query_where
    );
  }
}
add_action('pre_user_query','isa_pre_user_query');

Ma question est la suivante: comment puis-je également supprimer le rôle d’éditeur de cette liste déroulante afin que les éditeurs ne puissent pas créer d’autres éditeurs? Je souhaite supprimer les rôles Administrateur et Éditeur de ce menu déroulant et limiter les choix de rôle uniquement à Auteur, Contributeur et Abonné.

Des idées?

3
Ismael Latorre

Essayez d’utiliser le code ci-dessous pour supprimer l’option administrateur et éditeur du menu déroulant. Utiliser le filtre editable_roles

function wdm_user_role_dropdown($all_roles) {

    global $pagenow;

    if( current_user_can('editor') && $pagenow == 'user-edit.php' ) {
        // if current user is editor AND current page is edit user page
        unset($all_roles['administrator']);
        unset($all_roles['editor']);
    }

    return $all_roles;
}
add_filter('editable_roles','wdm_user_role_dropdown');
6
WisdmLabs