Czy usunąć możliwość przeglądania administratora na liście użytkowników przez innych użytkowników?


15

( Uwaga moderatora: oryginalny tytuł brzmiał „Usuń administratora z menu użytkownika”)

Utworzyłem rolę administratora klienta, która jest zasadniczo edytorem z możliwością dodawania / usuwania użytkowników. Artykuł „ Edytor może utworzyć dowolnego nowego użytkownika oprócz administratora ” doskonale pomógł powstrzymać moją rolę administratora mojego nowego klienta przed edytowaniem lub tworzeniem prawdziwego użytkownika administratora.

Idealne byłoby jednak ukrycie administratorów przed administratorami klientów podczas przeglądania użytkowników. Chcę, aby „uwierzyli” , że są administratorami swojej witryny, ale nie chcę, aby mogli nawet zobaczyć moją rolę / użytkownika - zasadniczo ukrywając przed nimi rolę „administratora”, gdy są w „Użytkownikach” płyta.

Odpowiedzi:


10

Cześć @Carlos:

Spróbuj dodać następujące elementy do functions.phppliku motywu lub w .phppliku we wtyczce, którą możesz pisać (co działa w 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);
  }
}

Jeśli masz WordPress 3.0.x, spróbuj tego (ponieważ WordPress nie dodał 'pre_user_query'haka do 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
Ukrywa to tylko pierwszego dodanego użytkownika (który prawie zawsze jest administratorem) ... ale jeśli administrator ma identyfikator inny niż 1, musisz odpowiednio zmienić zapytanie. Ukryje również tylko 1 administratora, a nie wszystkich administratorów.
— EAMann

Właściwie to mogłem tylko uruchomić to w wersji 3.1. Ten sam kod w starszych wersjach wydaje się nie załatwić sprawy (nawet 3.04).
— Carlos

@EAMann - Prawda, było mi wygodnie. Jeśli ktoś potrzebuje więcej, zajrzę do tego.
— MikeSchinkel

@Carlos - Czy potrzebujesz wersji 3.0.x, czy wszystko w porządku, wersja 3.1?
— MikeSchinkel

@ Mike - wow, tak, jeśli byłbyś gotów mi pomóc, byłoby cudownie. Hackowałem się bezskutecznie. Do moich celów identyfikator administratora 1 działa dobrze. Bardzo to doceniam.
— Carlos

10

Oto modyfikacja odpowiedzi MikeSchinkela, która sprawdza, czy bieżący użytkownik ma rolę administratora, a jeśli nie, wybiera tylko użytkowników, którzy są subskrybentami.

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
Tylko do wiadomości Dla każdego, kto w przyszłości nie jest zbyt biegły w SQL, taki jak ja, jeśli chcesz pokazać wszystkim użytkownikom, którzy nie są administratorami (redaktorzy, autorzy, subskrybenci itp.), Ale nadal ukrywają administratorów, możesz zmienić tę linię: AND {$wpdb->usermeta}.meta_value = 0i zamiast tego ustaw meta wartość na <10: tak, AND {$wpdb->usermeta}.meta_value < 10)że pokaże wszystkich użytkowników i ukryje wszystkich administratorów przed wszystkimi użytkownikami, bez względu na ich poziom.
— Howdy_McGee

2

Poziomy użytkowników są przestarzałe , więc ta metoda sprawdza w zamian możliwości:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.