Login: disponibilize o seu conteúdo apenas para usuários logados

Nesta demonstração iremos criar uma página que apenas usuários logados irão ter acesso ao conteúdo dela.

Resultado

Esta página chamado “Painel” (nesta demonstração, você pode dar o nome que quiser) apenas os usuários que estiverem logados poderão visualizar o conteúdo desta página. E quando o usuário realizar o login será direcionado para está página

Assista o vídeo desta demonstração:

1 – Criar a página no painel

Logado no painel do WordPress adicione uma nova página (Página > Adicionar Nova), coloque o título Painel e escreva algum texto no campo do conteúdo do post, neste caso estou usando um tema, o BeTheme, e ele tem um editor chamado Muffin Builder, um daqueles “arrasta e solta”, e par a inserir o conteúdo com ele é um pouco diferente, mas o resultado é o mesmo.

Feito isso é só publicar a página.

2 – Crie um template para está página

Para criar um template vamos precisar acessar o servidor, uma forma é via ftp, utilizando o Filezilla.

Quando estiver conectado ao seu servidor localize a pasta do seu tema que está ativo. Procure pelo arquivo page.php, vamos utilizar ele como modelo base.

Uma boa prática é criar um filho do tema ativo, assim não perderemos nossas customização em caso de uma atualização do tema.

Como estou desenvolvendo o tema utilizando o tema pago BeTheme, o nosso filho é o betheme-child.

Vamos então renomear o arquivo page.php para page-page.php e subir para nosso tema filho, dessa forma estaremos criando um template bem específico que servirá apenas para a página que possua o “slug” de painel. Você pode criar templates para qualquer página, o WordPress o reconhecerá pelo slug ou pelo id.

Para fazer a verificação de se o usuário está logado vamos utilizar a função is_user_logged_in() dentro de um if para verificar se o visitante está logado:

<?php
if ( is_user_logged_in() ) {
    //AQUI O CONTEÚDO PARA LOGADO
} else {
    //CONTEÚDO PARA NÃO LOGADOS
}
?>

3 – Separa o conteúdo a ser mostrado

Agora vamos deixar nosso bloco de conteúdo que deve ser mostrado apenas aos logados dentro do bloco verdade do nosso if. E uma mensagem com um link (para que ele possa fazer o login) para o não logado.

4 – Como ficou o page-painel.php

get_header();
?>

	<section id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			/* Start the Loop */
			while ( have_posts() ) :
				the_post();

                    if ( is_user_logged_in() ) {
                        
                        get_template_part( 'template-parts/content/content', 'page' );
                        
                    } else {
                        
                        echo "Exclusivo para usuários logados.";
                        
                    }          
            
            
				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End of the loop.
			?>

		</main><!-- #main -->
	</section><!-- #primary -->

<?php
get_footer();<?php
/**
 * The template for displaying all pages.
 *
 * @package Betheme
 * @author Muffin group
 * @link https://muffingroup.com
 */

get_header(); ?>
<div id="Content">
        <div class="content_wrapper clearfix">

            <div class="sections_group">

                <div class="entry-content" itemprop="mainContentOfPage">


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

        <?php
            while (have_posts()) {

                the_post();

                $mfn_builder = new Mfn_Builder_Front(get_the_ID());
                $mfn_builder->show();

            }
        ?>

<?php } else { ?>
<div class="section_wrapper mcb-section-inner">
    <div class="wrap mcb-wrap mcb-wrap-mpfmdhvkb one valign-top clearfix" style="">
        <div class="mcb-wrap-inner">
            <div class="column mcb-column mcb-item-ebj3qzphj one column_column">    <div class="column_attr clearfix" style="">Usuário não logado. <a href="/login">Clique aqui</a> para logar.</div>
            </div>
        </div>
    </div>
</div>                    
<?php } ?>
                </div>			
            </div>		
        </div>
    </div>
<?php get_footer();
get_header();
?>

	<section id="primary" class="content-area">
		<main id="main" class="site-main">

			<?php

			/* Start the Loop */
			while ( have_posts() ) :
				the_post();

                    if ( is_user_logged_in() ) {
                        
                        get_template_part( 'template-parts/content/content', 'page' );
                        
                    } else {
                        
                        echo "Exclusivo para usuários logados.";
                        
                    }          
            
            
				// If comments are open or we have at least one comment, load up the comment template.
				if ( comments_open() || get_comments_number() ) {
					comments_template();
				}

			endwhile; // End of the loop.
			?>

		</main><!-- #main -->
	</section><!-- #primary -->

<?php
get_footer();

Dessa forma criamos um template específico para a página Painel. Mas reparem que quando o não logado faz o login ele é direcionado por padrão para o painel de adm do WordPress. E não queremos isso, queremos que ao realizar o login ele seja direcionado para nosso Painel. Então vamos direcionar nossos amiguinhos.

5 – Redirecionar o usuário

Para realizar o redirecionamento iremos criar um filtro. Vou utilizar nesta demonstração um trecho criado pelo Sergio Ronei.

Este trecho deverá ser inserido no arquivo functions.php do nosso filho. Se você ainda não sabe criar um filho, no WordPress, tem este artigo.

/**
* Redirecionar usuário para o site após login bem sucedido.
* Desenvolvido por Sergio Ronei - https://altosite.com.br
https://altosite.com.br/wordpress-redirecionar-usuario-para-site-apos-login/
**/

function my_login_redirect( $redirect_to, $request, $user ) {
//o trecho abaixo verifica se existe algum usuário a ser checado
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
//checa se o usuário é admin. Se positivo, leva o admin para o painel de administração.
if ( in_array( 'administrator', $user->roles ) ) {
//se for qualquer outro tipo de usuário, leva para a home do site.
return $redirect_to;
} else {
return home_url('/painel');
}
} else {
return $redirect_to;
}
}

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

Repare que para quando o usuário for um não adiministrator ele será direcionado para o /painel.

Agora ficou bacana, mas a barra de usuário ainda é apresentada. Quero retirar ela de lá. Para isso vou aproveitar do mesmo artigo do Sergio Ronei esse trecho, que também será inserido no functions.php

Remover a barra de admin


add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
  show_admin_bar(false);
}
}

Muito bom, agora a barra não será mostrada, pois adicionamos uma ação nova para remover a barra do admin.

A partir disso muita coisa legal pode ser criada, se tem alguma sugestão de algo mais complexo sugere ai que vou criar como demonstração e continuação deste post.

Gostou? Fez sentido e te ajudou, considera deixar um comentário e curte nossas redes sociais para estar recebendo conteúdos especiais para desenvolvedores de temas e plugins para WordPress.

Flyer vector created by rawpixel.com – www.freepik.com

Deixe um comentário