Snippets e Shortcodes

Como mostrar conteúdo exclusivo para usuários registrados no WordPress

Google+ Pinterest LinkedIn Tumblr
Anúncios Google

Seja num site todo aberto ou com venda de assinaturas, é fato que teremos algum conteúdo que precisará ficar oculto dependendo de quem visita a página. Tais partes podem não ser de interesse geral dos leitores, e você não vai querer incomodar todo mundo com aquilo.

Por exemplo, num site com múltiplos autores, talvez seja necessário colocar um lembrete dentro do post, que será visto ou não pelo leitor de acordo com seu cargo (editor, administrador, etc). Ou ainda não exibir anúncios para membros registrados. São muitas as possibilidades, e só na rotina de trabalho elas acabam surgindo.

O WordPress tem uma grande quantidade de funções e caminhos, dificilmente tem algo que não possa ser feito. Pra resolver nosso problema vamos usar algumas delas com apoio das estruturas do PHP.

As condições IF, se usadas com a função “is_user_logged_in” do WordPress, vão checar se o visitante é um usuário logado ou não, e apresentar conteúdos diferentes em resposta.

Por exemplo:

if ( is_user_logged_in() ) {
echo 'Olá, usuário registrado!';
}
else {
echo 'Olá, visitante!';
}

Ou seja: se (if) o usuário estiver logado (is_logged_in), escreva (echo) “Olá, usuário registrado”. Caso contrário (else), escreva “Olá, visitante!”. Simples, não? O conteúdo exclusivo para usuários registrados fica dentro do primeiro echo.

O que dá pra fazer com isso?

Mensagens

…como essa do exemplo anterior, colocada em qualquer lugar como o alto da barra lateral. Dá pra melhorar e incluir o nome do usuário registrado, assim:

if ( is_user_logged_in() ) { 
$current_user = wp_get_current_user();
echo 'Olá, '. $current_user->display_name .'!';
}
else {
echo 'Olá, visitante! Que tal <a href="'. bloginfo('url') .'/wp-register.php" title="Seguir até a página de registro">registrar-se no site</a>?';
}

Mudei aqui o resultado do echo para em vez de simples mensagens, usar mais funções do WordPress para recuperar informações do usuário caso ele esteja logado, e então mostrar seu nome de exibição.

O resultado será algo como “Olá, Fulano!”; caso contrário, o leitor terá uma mensagem pedindo para que se registre: “Olá, visitante! Que tal registrar-se no site?”, com link para a página de registro.

Exibir anúncios só para visitantes

Vai depender do tipo de código do anúncio, mas basicamente seria isso:

if ( !is_user_logged_in() ) { 
 //código do anúncio aqui 
}

A checagem só mudou pra ver se o usuário não está logado (o sinal de exclamação determina se o resultado é FALSO, ou seja, “usuário logado  é falso”), então se atender à condição, o código do anúncio roda. Senão, nada acontece (não tem a condição else).

Com o AdSense, por exemplo, ficaria assim (mude para o código do seu anúncio):

if ( !is_user_logged_in() ) { ?>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-0000000000000000";
/* modelo do anuncio */
google_ad_slot = "0000000000";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><?php
}

Post / trecho exclusivo para logados

Procure o the_content dentro do arquivo single.php ou post.php (dependendo da estrutura do tema, pode ser até em outro lugar, mas costuma ser o post.php). Uma linha antes dele, insira o seguinte:

<?php if ( is_user_logged_in() ) { ?>

e depois:

<?php } 
else { 
echo 'Conteúdo para usuários registrados'; } 
?>

Isso só vai esconder a postagem, qualquer outra parte que seja da postagem mas aparece  (botões de compartilhamento, caixas de autor, etc) vai continuar ativo. O ideal é usar o mesmo esquema colocando o if antes do conteúdo todo que quiser esconder, e fechar logo após o fim, mas fica difícil explicar casos específicos com tanta variedade de temas e estruturas.

Para fazer isso com só um trecho, você pode criar um shortcode. Veja a seguir.

Shortcode

O que vamos fazer é juntar ao arquivo de funções (functions) uma função (claro!) para criar um shortcode, com o qual esconderemos trechos do nosso post – esconder nem é o termo ideal, já que a parte nem vai ser gerada pela página.

Comece inserindo isso no seu arquivo functions.php – pode ser no final, antes do ?>, se existir:

// shortcode conteúdo só para logados
function tutoriart_logged( $atts, $content = null ) {
if ( is_user_logged_in() && !is_feed() ) {
return $content;
}
else {
$content = '<div class="so-membros">Só para membros, desculpe!</div>';
return $content;
}
}
add_shortcode('registrados', 'tutoriart_logged');

Então dentro do post é só abrir e fechar a parte exclusiva para membros com o shortcode “registrados”, assim:

[registrados]Aqui o conteúdo exclusivo[/registrados]

Usuários logados verão o conteúdo normal, enquanto visitantes só terão a div com a frase “Só para membros, desculpe!”.

Nota: você pode facilmente alterar quem pode ou não ver os conteúdo exclusivos alterando a função. Por exemplo, para permitir que só assinantes do nível administrador possam ver, mude o is_user_logged_in para current_user_can (que checa as permissões do usuário atual). O Codex tem todos os cargos e capacidades, é só escolher.

Exemplo: só administradores (únicos que tem tem o privilégio “update_core”) verão o conteúdo, usando o shortcode “equipe”. O conteúdo “secreto” também não será colocado no feed:

// shortcodes conteúdo só para admin
function tutoriart_equipe( $atts, $content = null ) {
if ( current_user_can('update_core') && !is_feed() ) {
return $content;
}
else {
$content = 'Só para membros registrados. Registre-se agora mesmo!';
return $content; 
}
}
add_shortcode('equipe', 'tutoriart_equipe');

Conclusão

Lembrando que tudo isso deve ser feito em arquivos PHP do seu tema WordPress. Se quiser fazer na sidebar, procure o trecho certo no arquivo sidebar.php (pelo menos na maioria dos temas, é nesse arquivo); se for dentro do post, pode ser no post.php ou single.php, e assim por diante.

Fundador do Tutoriart em 2010, é ex-instrutor de Photoshop, design web e gráfico. Em quase uma década de redação online, tem cerca de 1500 artigos publicados. Gerencia também o Memória BIT.

2 Comments

  1. Muito bom o material. Gostaria de bloquear o conteúdo do meu site quando usuário clica em qualquer opção do segundo menu. E após o registro do mesmo aí sim libero o conteúdo. Pode em ajudar?

  2. Excelente explicação, meu caro.
    Vai ser de muita serventia para meus projetos.

Write A Comment

Pin