Como verificar se um usuário está em uma função específica?

44

Eu tenho um requisito bastante específico para mostrar texto diferente em um rótulo de campo na página de perfil do usuário com base na função do usuário atual. Eu não consigo descobrir como verificar se o uso atual é um "autor".

Estou procurando uma função como:

is_user_in_role($user, "author");

Eu imagino que isso é bem simples, mas eu pesquisei por muito tempo sem uma resposta, então pensei em postar aqui.

    
por jessegavin 08.12.2010 / 16:47

4 respostas

86

Se você só precisa disso para o usuário atual current_user_can() aceita as funções e os recursos.

UPDATE : não é mais garantido que passar um nome de função para current_user_can() funcione corretamente (consulte # 22624 ). Em vez disso, você pode querer verificar o papel do usuário:

$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
}
    
por Rarst 08.12.2010 / 16:54
9

Eu estava procurando uma maneira de obter a função de um usuário usando o ID do usuário. Aqui está o que eu criei:

function get_user_roles_by_user_id( $user_id ) {
    $user = get_userdata( $user_id );
    return empty( $user ) ? array() : $user->roles;
}

Em seguida, uma função is_user_in_role() pode ser implementada da seguinte forma:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
    
por Stephen M. Harris 11.06.2012 / 16:18
1

Você também pode criar um novo objeto de usuário:

$user = new WP_User( $user_id );

if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
    return true;
}

Não tenho certeza de qual versão get_user_roles_by_user_id foi removida, mas não é mais uma função disponível.

    
por sMyles 16.11.2017 / 01:44
0

Aqui está uma função que aceita um usuário e uma função para maior flexibilidade:

function my_has_role($user, $role) {
  $roles = $user->roles; 
  return in_array($role, (array) $user->roles);
}

if(my_has_role($user, 'some_role')) {
  //do stuff
}
    
por Ben 29.11.2017 / 00:05