Como posso verificar se o usuário conectado atual é um administrador ou um editor?
Eu sei como fazer cada um individualmente:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
Mas como faço para trabalhar juntos? Ou seja, o usuário é um administrador ou editor?
users
user-roles
andy
fonte
fonte
if( current_user_can('editor') || current_user_can('administrator') )
Respostas:
Primeira resposta, não relacionada ao WordPress, porque é apenas PHP: use a lógica "OR" operador:
Se você deseja verificar mais de duas funções, pode verificar se as funções do usuário atual estão dentro de uma matriz de funções, algo como:
No entanto,
current_user_can
pode ser usado não apenas com o nome da função dos usuários, mas também com recursos.Portanto, assim que editores e administradores puderem editar páginas, sua vida ficará mais fácil com a verificação desses recursos:
Dê uma olhada aqui para obter mais informações sobre recursos.
fonte
is_logged_in();
?current_user_can()
sempre retorna false se o usuário não estiver conectado ewp_get_current_user()
retornará um usuário sem nenhuma função se o usuário não estiver conectado, portantoarray_intersect()
, sempre será falso.current_user_can()
função, podemos ver a linha " Embora a verificação de funções específicas no lugar de uma capacidade seja suportada em parte, essa prática é desencorajada, pois pode produzir resultados não confiáveis ". Então eu acho que seria melhor evitar o uso de papéis durante a verificação de :-) capacidade de um usuárioarray_intersect
método, recebo um aviso do PHP em nosso log de erros do servidor informandoarray_intersect(): Argument #2 is not an array
. Isso ocorre porque os usuários que estão verificando têm apenas uma função?array_intersect($allowed_roles, (array)$user->roles )
funcionará sem problemas.Primeiro,
current_user_can()
não deve ser usado para verificar a função de um usuário - deve ser usado para verificar se um usuário tem um recurso específico .Segundo, em vez de se preocupar com a função do usuário, mas focando-se nos recursos, você não precisa se preocupar em fazer coisas como o problema perguntado na pergunta original (que é verificar se o usuário é um administrador ou um editor). Em vez disso, se
current_user_can()
estivesse sendo usado como pretendido, que é verificar os recursos de um usuário, não a função deles, você não precisaria da verificação condicional para conter um teste "ou" (||). Por exemplo:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages é um recurso das funções de administrador e editor, mas não de funções inferiores, como autores. É assim que
current_user_can()
se destina a ser usado.fonte
current_user_can
geralmente deve ser usado para recursos, não para papéis.Como a resposta do @butlerblog afirmou, você não deve usar o current_user_can para verificar uma função
Este aviso foi adicionado especificamente na documentação da
has_cap
função PHP, chamada porcurrent_user_can
A maneira CORRETA de fazer isso é obter o usuário e verificar o
$user->roles
seguinte:Aqui estão algumas funções auxiliares que eu uso para fazer isso (como às vezes eu não quero apenas o usuário atual):
Então você pode fazer isso:
current_user_has_role( 'editor' );
ou
current_user_has_role( array( 'editor', 'administrator' ) );
fonte
fonte