Jak mogę sprawdzić, czy bieżący zalogowany użytkownik jest administratorem czy edytorem?
Wiem, jak to zrobić indywidualnie:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
Ale jak mam pracować razem? Czyli użytkownik jest administratorem lub redaktorem?
users
user-roles
andy
źródło
źródło
if( current_user_can('editor') || current_user_can('administrator') )
Odpowiedzi:
Pierwsza odpowiedź, niezwiązana z WordPress, ponieważ jest to tylko PHP: użyj logicznego operatora „LUB”:
Jeśli chcesz sprawdzić więcej niż dwie role, możesz sprawdzić, czy role bieżącego użytkownika znajdują się w tablicy ról, na przykład:
Jednakże,
current_user_can
może być stosowany nie tylko z nazwy ról użytkowników, ale także z możliwościami.Tak więc, gdy zarówno redaktorzy, jak i administratorzy będą mogli edytować strony, łatwiej będzie ci sprawdzić te możliwości:
Zajrzyj tutaj, aby uzyskać więcej informacji na temat możliwości.
źródło
is_logged_in();
?current_user_can()
zawsze zwraca false, jeśli użytkownik nie jest zalogowany, iwp_get_current_user()
zwraca użytkownika bez żadnej roli, jeśli użytkownik nie jest zalogowany, więcarray_intersect()
zawsze będzie false.current_user_can()
funkcji widzimy wiersz „ Chociaż częściowe sprawdzanie poszczególnych ról zamiast funkcji jest obsługiwane, ta praktyka jest odradzana, ponieważ może dawać niewiarygodne wyniki ”. Myślę więc, że lepiej byłoby unikać ról podczas sprawdzania możliwości użytkownika :-)array_intersect
metody, w dzienniku błędów serwera pojawia się ostrzeżenie PHParray_intersect(): Argument #2 is not an array
. Czy to dlatego, że sprawdzany użytkownik (użytkownicy) ma tylko jedną rolę?array_intersect($allowed_roles, (array)$user->roles )
będzie działać bez problemów.Po pierwsze,
current_user_can()
nie powinien być używany do sprawdzania roli użytkownika - powinien być używany do sprawdzania, czy użytkownik ma określone możliwości .Po drugie, zamiast przejmować się rolą użytkownika, ale koncentrując się na możliwościach, nie musisz zawracać sobie głowy robieniem rzeczy takich jak problem zadany w pierwotnym pytaniu (czyli sprawdzenie, czy użytkownik jest administratorem LUB redaktorem). Zamiast tego, jeśli
current_user_can()
był używany zgodnie z przeznaczeniem, czyli do sprawdzania możliwości użytkownika, a nie jego roli, nie trzeba sprawdzania warunkowego, aby zawierał test „lub” (||). Na przykład:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages to funkcja zarówno roli administratora, jak i edytora, ale nie żadnych niższych ról, takich jak autorzy. Tak
current_user_can()
zamierzano go używać.źródło
current_user_can
powinny być generalnie używane dla funkcji, a nie ról.Jak stwierdzono w odpowiedzi @butlerblog, nie powinieneś używać current_user_can do sprawdzania roli
To powiadomienie jest specjalnie dodane w dokumentacji PHP
has_cap
funkcji, która jest wywoływanacurrent_user_can
POPRAWNIE sposobem na to jest, aby użytkownik i sprawdzić
$user->roles
, jak poniżej:Oto kilka funkcji pomocniczych, których używam do tego (ponieważ czasami nie chcę tylko bieżącego użytkownika):
Następnie możesz po prostu to zrobić:
current_user_has_role( 'editor' );
lub
current_user_has_role( array( 'editor', 'administrator' ) );
źródło
źródło