Supprimer la possibilité pour les autres utilisateurs d'afficher l'administrateur dans la liste des utilisateurs?


15

( 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 / supprimer des utilisateurs. L'article «L' éditeur peut créer n'importe quel nouvel utilisateur sauf administrateur » a été excellent pour aider mon nouveau rôle d'administrateur client à ne pas modifier ou créer un véritable utilisateur administrateur.

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

Réponses:


10

Salut @Carlos:

Essayez d'ajouter ce qui suit au functions.phpfichier de votre thème ou dans un .phpfichier d'un plugin que vous pourriez écrire (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 cela (puisque WordPress n'a pas ajouté le 'pre_user_query'hook avant 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);
  }
}

1
Cela ne fait que masquer le premier utilisateur ajouté (qui est presque toujours l'administrateur) ... mais si l'administrateur a un ID autre que 1, vous devrez modifier la requête de manière appropriée. Il ne masquera également qu'un administrateur, pas tous les administrateurs.
EAMann

Je ne pouvais en fait que faire fonctionner cela sur la version 3.1. Le même code sur les anciennes versions ne semble pas faire l'affaire (3.04 même).
Carlos

@EAMann - C'est vrai, j'étais pratique. Si quelqu'un a besoin de plus, je vais m'en occuper.
MikeSchinkel

@Carlos - Avez-vous besoin de la v3.0.x, ou la v3.1 est-elle correcte?
MikeSchinkel

@ Mike — wow, oui, si vous voulez bien m'aider, ce serait merveilleux. J'ai piraté en vain. Pour mes besoins, l'Admin ID 1 fonctionne très bien. J'apprécie vraiment cela.
Carlos

10

Voici un mod à la réponse de MikeSchinkel qui vérifie si l'utilisateur actuel a un rôle d'administrateur et sinon il ne sélectionne que 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
        );

    }
}

1
Juste pour info Pour toute personne future qui n'est pas très compétente en SQL comme moi, si vous voulez montrer tous les utilisateurs qui ne sont pas administrateurs (éditeurs, auteurs, abonnés, etc.) mais toujours masquer les administrateurs, vous pouvez changer cette ligne: AND {$wpdb->usermeta}.meta_value = 0et à la place, faites la méta valeur <10 comme ceci: AND {$wpdb->usermeta}.meta_value < 10)qui montrera tous les utilisateurs et masquera tous les administrateurs de tous les utilisateurs quel que soit leur niveau.
Howdy_McGee

2

Les niveaux d'utilisateur sont obsolètes , donc cette méthode vérifie les capacités à la place:

/** 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' );

1

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


1
wp_user_queryne fonctionne pas dans 3.6.1, cependant pre_user_query. Je ne sais pas pour 3.5.x
gwillie

1
Êtes-vous sûr? Pouvez-vous citer une source? Cette action est utilisée dans le tronc actuel - voir wp-includes / user.php, ligne 549 .
Johannes Pille
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.