Publicação

O loop no WordPress

foto de
Gabriel Goulart CONTEÚDO EM DESTAQUE

 Já pensou em criar seu próprio tema no WordPress, mas não sabe fazer seus posts aparecerem na página? Isso é porque primeiro você tem que entender como funciona o loop e o método have_posts(), pois é ele que vai iterar dentre todos os posts que você tem e te permitir exibi-los na página.

Antes precisamos criar uma nova página no WordPress e depois na estruturação principal da pasta onde o WordPress está instalado, precisamos criar um arquivo chamado "page-slugdapágina.php", aqui no meu caso o slug da página é blog então meu arquivo é "page-blog.php". Feito isso, vamos dar uma olhada no código abaixo:

<?php
get_header();
// args
$args = array(
	'tag'	=> 'tecnologia',
	'post_type'	=> 'post',
	'posts_per_page'	=> 3
);
// query
$the_query = new WP_Query ( $args );
?>

Existe uma classe no WordPress que é a WP_Query e é ela que lida com as requisições dos posts. No exemplo acima, como eu decidi fazer uma forma personalizada de mostrar os posts, eu precisei criar um novo objeto do tipo WP_Query passando para ele um array de argumento que chamei de $args. Vamos ver o que são esses argumentos:

O argumento tag me indica que eu só quero procurar, dentre os posts existente, aqueles que tenham a tag especificada, nesse caso tecnologia é a minha tag.    

O post_type me diz qual o tipo de post que eu quero pegar, isso porque no WordPress existem outros tipos de post que não são o post padrão, nesse caso eu coloquei posts pois só quero os que forem do tipo padrão.

Por fim temos o posts_per_page que nos diz quantos posts queremos visualizar por página, o que ajuda muito caso queira-se fazer uma paginação. No caso acima coloquei para que apenas 3 posts dentre os posts encontrados apareçam.    

Agora vejamos o bloco de código seguinte:


<div class="container">
    <div class="row">
    <div class="col-md-8">
        <?php
            if( $the_query->have_posts() ):
                while ( $the_query->have_posts() ) : $the_query->the_post();
                    echo '<a href=' . get_permalink() . '>' . get_the_title() . '</a>';
                    the_content();
                    echo '<hr>';
                endwhile;
            endif;?>
        </div>
        <div class="col-md-4">
            <?php get_sidebar(); ?>
        </div>
    </div>
</div>
<?php wp_reset_query();	 // Restore global post data stomped by the_post(). ?>

Como foi dito la em cima, é o metodo have_posts() que vai nos permitir checar iterar dentre todos os nossos posts. Primeiro checamos se existe algum post e caso exista, fazemos um loop while para iterar dentre todos eles. Caso quiséssemos fazer uma iteração sem restrições, era só chamarmos apenas o metodo have_posts() sem que ele fosse chamado pela variável criada $the_query. Em seguida usamos o método the_post(), que serve de ponteiro para os posts, começando do mais recente.    

No exemplo a cima eu dei um echo no título do post colocando uma âncora para a página do post. Isso porque o método get_permalink() me retorna o link da publicação e o get_the_title() me retorna a string do título. Note que se eu quisesse apenas imprimir o título eu poderia usar a função get_title() que já exibe o título na tela. Em seguida eu usei o get_content() para exibir o conteúdo do post na tela. E então esse processo se repetirá até que loop tenha passado por todos os posts que cumprem minhas restrições colocadas na primeira imagem.

No final podemos ver o método wp_reset_query(), isso porque se não resetarmos o WP_Query, as próximas vezes que chamarmos a função have_posts() ela vai filtrar de acordo com as restrições colocadas.


 Por fim, o código todo ficaria assim:


<?php
get_header();
// args
$args = array(
    'post_type'		=> 'post',
    'posts_per_page' => 3
);
// query
$the_query = new WP_Query( $args );
?>



<div class="container">
    <div class="row">
    <div class="col-md-8">
        <?php
            if( $the_query->have_posts() ):
                while ( $the_query->have_posts() ) : $the_query->the_post();
                    echo '<a href=' . get_permalink() . '>' . get_the_title() . '</a>';
                    the_content();
                    echo '<hr>';
                endwhile;
            endif;?>
        </div>
        <div class="col-md-4">
            <?php get_sidebar(); ?>
        </div>

    </div>
</div>

<?php wp_reset_query();	 // Restore global post data stomped by the_post(). ?>

<?php get_footer(); ?>

Agora é só estilizar para que os posts fiquem visualmente agradáveis!

No link abaixo temos falando um pouco sobre o WP_Query e todos os argumentos que podem ser passados a ele:
https://codex.wordpress.org/Class_Reference/WP_Query

Comentários