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


15

( Anmerkung 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 Client-Administratorrolle keinen True-Administrator-Benutzer bearbeitet oder erstellt.

Ideal wäre es jedoch, Administratoren vor Clientadministratoren zu verbergen, wenn diese Benutzer anzeigen. Ich möchte , dass sie zu „glauben“ , dass sie der Admin ihrer Seite sind , aber ich möchte nicht , sie in der Lage sein , auch zu meiner Rolle / Benutzer sehen - im Wesentlichen die versteckt „Administrator“ Rolle von ihnen , wenn sie in den sind „Benutzer“ panel.

Antworten:


10

Hallo @Carlos:

Fügen Sie der functions.phpDatei Ihres Themas oder einer .phpDatei in einem Plugin, das Sie möglicherweise schreiben, Folgendes hinzu (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 dies stattdessen (da WordPress den 'pre_user_query'Hook erst in 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);
  }
}

1
Das verbirgt nur den ersten hinzugefügten Benutzer (der fast immer der Administrator ist) ... aber wenn der Administrator eine andere ID als 1 hat, müssen Sie die Abfrage entsprechend ändern. Außerdem wird nur 1 Administrator ausgeblendet, nicht alle Administratoren.
— EAMann

Ich konnte das eigentlich nur auf Version 3.1 zum Laufen bringen. Der gleiche Code auf älteren Versionen scheint nicht den Trick zu machen (3.04 sogar).
— Carlos

@ EAMann - Stimmt, ich war praktisch. Wenn jemand mehr braucht, werde ich mich darum kümmern.
— MikeSchinkel

@Carlos - Benötigen Sie v3.0.x oder ist v3.1 in Ordnung?
— MikeSchinkel

@ Mike - wow, ja, wenn du mir dabei helfen würdest, wäre es wunderbar. Ich habe vergebens gehackt. Für meine Zwecke funktioniert Admin ID 1 einwandfrei. Ich weiß das wirklich zu schätzen.
— Carlos

10

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
        );

    }
}

1
Nur zu Ihrer Information Für alle, die in der Zukunft nicht besonders gut mit SQL umgehen können, wie ich, können Sie diese Zeile ändern: AND {$wpdb->usermeta}.meta_value = 0und Stellen Sie stattdessen den Meta-Wert auf <10 ein AND {$wpdb->usermeta}.meta_value < 10), um alle Benutzer anzuzeigen und alle Administratoren für alle Benutzer auszublenden, unabhängig von ihrer Stufe.
— Howdy_McGee

2

Benutzerebenen sind veraltet , daher überprüft diese Methode stattdessen die Funktionen:

/** 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_queryMit action kann die Benutzerabfrage seit WordPress 3.1.0 geändert werden


1
wp_user_queryfunktioniert in 3.6.1 jedoch pre_user_querynicht. Weiß nicht über 3.5.x
— gwillie

1
Bist du sicher? Können Sie eine Quelle angeben? Diese Aktion wird im aktuellen Trunk verwendet - siehe wp-includes / user.php, Zeile 549 .
— Johannes Pille
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.