( 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.
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);
}
}
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
);
}
}
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' );
Mit der Aktion pre_user_query
kann die Benutzerabfrage geändert werden seit WordPress 3.1.0