Descubra se o usuário logado não é assinante

8

Existe alguma etiqueta condicional que me permita exibir determinado conteúdo apenas se o usuário NÃO for um assinante?

Nasir Zia
fonte

Respostas:

9
<?php
global $current_user; // Use global
get_currentuserinfo(); // Make sure global is set, if not set it.
if ( ! user_can( $current_user, "subscriber" ) ) // Check user object has not got subscriber role
    echo 'User is a not Subscriber';
else
    echo 'User is a Subscriber';
?>
Scott
fonte
15

Uma maneira ainda mais simples do que a @Brady mostrou é o uso current_user_can:

if ( current_user_can( 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again!";

MU

Também há um equivalente para instalações de MU, chamado current_user_can_for_blog:

global $blog_id;
if ( current_user_can_for_blog( $blog_id 'subscriber' ) )
    echo "Hi, dear subscriber! Glad seeing you again on this blog!";

Atrás da cortina

Ao olhar a fonte das funções para instalações únicas ou de MU , você verá que ambas dependem basicamente wp_get_current_user()e, em seguida, fazem uma verificação has_cap. Agora, se você quiser ver de onde vem o limite, a WP_Userclasse / objeto entra no jogo.

Outros membros deste conjunto

Então há também author_can( $GLOBALS['post'], 'capability' );. Todas essas funções estão dentro ~/wp-includes/capabilitieslogo abaixo uma da outra.

Quando usar o que?

Agora, onde está a diferença entre current_user_can(_FOR_BLOG)e user_can?

  • user_can()é o mais novo (desde 3.1), mas precisa do usuário como objeto. Portanto, você pode usá-lo em casos em que não deseja segmentar o usuário atual, mas alguns usuários.
  • current_user_can_*() é obvio.
  • author_can()permite verificar recursos em um objeto de postagem. Este objeto está disponível apenas para postagens que já estão no banco de dados. Portanto, é principalmente para permitir / negar o acesso a recursos específicos de postagem.
kaiser
fonte
1
Sinto que precisa ser atualizado, porque: Não passe um nome de função para current_user_can (), pois isso não garante que funcione corretamente (consulte # 22624 ). da current_user_can()página de codex AFAIK não mudou.
Nicolai
@ialocin Você pode atualizar isso se quiser (tem mais de 2 anos). Você está basicamente certo. Por outro lado um papel é adicionado como a capacidade de bem;)
kaiser
1
Eu acho que isso realmente deve ser suficiente para uma observação / atualização, além disso, eu sou preguiçoso ... também;)
Nicolai
-3

É isto que você quer dizer?

global $userdata;
get_currentuserinfo();
if ( $userdata->user_level != 0 )//check user level by level ID
{
  echo 'User is a not Subscriber';
}
else
{
  echo 'User is a Subscriber';
}

Mais detalhes sobre os IDs para diferentes níveis: http://codex.wordpress.org/Roles_and_Capabilities#User_Levels

Há também a função current_user_can (), que permite indicar recursos específicos para maior flexibilidade. http://codex.wordpress.org/Function_Reference/current_user_can

gArn
fonte
3
Não use níveis de usuário ... Aqui está o que codex diz sobre isso:To maintain backwards compatibility with plugins that still use the user levels system (although this is very much discouraged), the default Roles in WordPress also include Capabilities that correspond to these levels. User Levels were finally deprecated in version 3.0.
Scott