Supprimer la possibilité pour d'autres utilisateurs de voir l'administrateur dans la liste d'utilisateurs?

12

( Note du modérateur: Le titre d'origine était "Supprimer l'administrateur du menu utilisateur")

J'ai créé un rôle d'administrateur client qui est essentiellement un éditeur avec la possibilité d'ajouter / de supprimer des utilisateurs. L'article " Editor peut créer tout nouvel utilisateur à l'exception de l'administrateur. " m'a permis d'empêcher mon nouveau rôle d'administrateur client de modifier ou de créer un utilisateur True administrateur.

Cependant, l'idéal serait de cacher les administrateurs aux administrateurs des clients lorsqu'ils consultent des utilisateurs. Je veux qu’ils "croient" qu’ils soient l’administrateur de leur site, mais je ne veux pas qu’ils puissent même voir mon rôle / utilisateur - masquant essentiellement "l'administrateur" leur rôle lorsqu'ils se trouvent dans le panneau "Utilisateurs" .

    
posée Carlos 28.02.2011 - 19:55

4 réponses

10

Bonjour @Carlos:

Essayez d'ajouter ce qui suit dans le fichier functions.php de votre thème ou dans un fichier .php au sein d'un plug-in que vous écrivez peut-être (ce qui fonctionne pour WordPress 3.1.x):

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

Si vous avez WordPress 3.0.x, essayez plutôt ceci (puisque WordPress n'a pas ajouté le 'pre_user_query' hook avant la version 3.1):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Is not administrator, remove administrator
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}
    
réponse donnée MikeSchinkel 28.02.2011 - 20:22
9

Voici un mod à la réponse de MikeSchinkel qui vérifie si l'utilisateur actuel a un rôle d'administrateur et si ce n'est pas le cas, il ne sélectionne que les utilisateurs abonnés.

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != '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}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}
    
réponse donnée patnz 07.02.2012 - 03:12
2

Les niveaux d'utilisateur sont obsolètes , cette méthode compare donc les fonctionnalités à l'aide de fonctionnalités:

/** Hide Administrator From User List **/
function isa_pre_user_query( $user_search ) {
    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' );
    
réponse donnée Howdy_McGee 14.11.2013 - 18:44
1

L'action pre_user_query peut être utilisée pour modifier la requête de l'utilisateur depuis WordPress 3.1.0

    
réponse donnée Virgo 04.03.2013 - 19:28

Lire d'autres questions sur les étiquettes