web-dev-qa-db-fra.com

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

( Note du modérateur: Le titre original é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 n’importe quel nouvel utilisateur sauf administrateur " a été excellent pour 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 de clients lorsqu'ils visionneraient 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 - en leur cachant essentiellement le "administrateur" quand ils sont dans le panneau "Utilisateurs".

14
Carlos

Bonjour @Carlos:

Essayez d’ajouter ce qui suit au fichier functions.php de votre thème ou dans un fichier .php contenu dans 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 hook 'pre_user_query' jusqu’à 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);
  }
}
10
MikeSchinkel

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 sélectionne uniquement les utilisateurs qui sont 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
        );

    }
}
10
patnz

Les niveaux utilisateur sont obsolètes , cette méthode vérifie donc les capacité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' );
2
Howdy_McGee

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

1
Virgo