it-swarm.com.de

Deaktivieren Sie die Möglichkeit für andere Benutzer, den Administrator in der Benutzerliste anzuzeigen.

( Hinweis des Moderators: Der ursprüngliche Titel lautete "Admin aus Benutzermenü entfernen")

Ich habe eine Clientadministratorrolle erstellt, bei der es sich im Wesentlichen um einen Editor handelt, der Benutzer hinzufügen/entfernen kann. Der Artikel " Editor kann jeden neuen Benutzer außer Administrator erstellen " hat hervorragend dazu beigetragen, dass meine neue Clientadministratorrolle keinen echten Administratorbenutzer bearbeitet oder erstellt.

Ideal wäre es jedoch, Administratoren vor Client-Administratoren zu verbergen, wenn diese Benutzer anzeigen. Ich möchte, dass sie "glauben", dass sie der Administrator ihrer Website sind, aber ich möchte nicht, dass sie meine Rolle/meinen Benutzer sehen können - im Wesentlichen, dass sie die Rolle "Administrator" vor ihnen verbergen wenn sie sich im Bereich "Benutzer" befinden.

14
Carlos

Hallo @Carlos:

Fügen Sie Folgendes zu der functions.php-Datei Ihres Themas oder zu einer .php-Datei in einem Plugin hinzu, das Sie möglicherweise schreiben (funktioniert für 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);
  }
}

Wenn Sie WordPress 3.0.x haben, versuchen Sie es stattdessen mit (da WordPress den Hook 'pre_user_query' erst mit 3.1 hinzugefügt hat):

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

Hier ist ein Mod für die Antwort von MikeSchinkel, der prüft, ob der aktuelle Benutzer eine Administratorrolle hat und falls nicht, nur Benutzer auswählt, die Abonnenten sind.

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

Benutzerebenen sind veraltet , daher prüft diese Methode stattdessen gegen Fähigkeiten:

/** 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

Mit der Aktion pre_user_query kann die Benutzerabfrage geändert werden seit WordPress 3.1.0

1
Virgo