WordPress

Inscreva-se em nosso canal no Youtube Daviwp

Entendendo o Loop do WordPress

29/04/2011 WordPress (14) comentários

1. O que é o Loop do WordPress?
O Loop é um conjunto de comandos em PHP (linguagem em que o WordPress foi construído) que tem como função buscar um ou mais posts na base de dados e possibilitar que as informações sobre o post sejam mostradas em uma página web. Essas informações podem ser o título do post, seu conteúdo, o autor, a data, e todas as demais informações de um post.

Por essa definição já dá pra ter uma ideia da importância do Loop, correto?

A seguir, os comandos que o compõem:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
 
    [Aqui vai o código dentro do loop]
 
<?php endwhile; ?>
<?php else : ?>
 
    [O que fazer ser não há posts?]
 
<?php endif; ?>

2. Onde está localizado o Loop?
Se você quiser ver o loop no seu blog, acesse o painel de administração, depois vá em Design > Theme Editor, e clique em index.php, à direita. Navegue pelo arquivo usando a barra lateral que logo você achará um código semelhante a este aqui de cima.

Se preferir editar o arquivo PHP diretamente, utilize um cliente FTp (como o Filezilla ou o SmartFTP) e navegue no seu servidor até a pasta onde está localizado seu blog, depois vá é wp-content/themes/[nome do tema ativo]/index.php.

Na verdade outras páginas do tema também têm o loop, tais como single.php (que mostra o post sozinho em uma página e a page.php).

3. Como ele funciona?
Basicamente o que o loop faz é:

1. Consultar a base de dados para saber se há posts que atendem aos critérios de busca (por exemplo, posts classificados segundo uma determinada categoria, ou, na página inicial os “n” últimos posts publicados no seu blog);
2. Formar uma “fila” de posts que atendem a esses critérios;
3. Enquanto ainda houver posts na fila, repetir os comandos que se encontram dentro do loop, para cada um dos posts.

A imagem abaixo representa esquematicamente o funcionamento do loop:
Assim, para listar o título e o conteúdo de cada um dos posts, é só incluir esses comandos dentro do loop. Como fazer isso? Através das “Template Tags”!

4. Template Tags
Template Tags nada mais são que funções internas do WordPress que, quando acionadas, trazem como resultado um determinado elemento de texto, a ser mostrado na página html, que é a página que os usuários acabam vendo. Alguns exemplos de template tags estão listados abaixo:

<?php the_title(); ?>
<?php the_content(); ?>
<?php the_time('F jS, Y'); ?>  
<?php the_permalink(); ?>

Mostra o título do post
Mostra o conteúdo do post
Mostra a data em que o post foi publicado, seguindo o padrão indicado entre parênteses
Mostra a URL do post

O site oficial do WordPress tem uma página só sobre as Template Tags. Lá estão praticamente todas as tags disponíveis.

Para usá-las, basta adicioná-las dentro do loop, cuidando para complementar com os elementos html adequados para que o texto resultante da Tag seja adequadamente representado. Por exemplo, é importante diferenciar o título do corpo do post, para que o resultado final não fique visualmente pobre. Para isso, é possível fazer o seguinte:

<h1><?php the_title(); ?></h1>
<p class="info">Categorias: <?php the_category(' '); ?>. Postado em: <?php the_time('F jS, Y'); ?>
<p><?php the_content(); ?></p>

Dessa forma é possível mostrar o título do Post destacado, com a tag html h1 e o post como parágrafo normal. Além disso, é possível usar estilos CSS para obter maior controle sobre o resultado final.

As imagens abaixo mostram um exemplo de Loop “básico”.

5. Truques interessantes com o Loop do WordPress

Inserir AdSense depois do primeiro post
Depois dos comandos que mostram o conteúdo do post, coloque o seguinte código:

<?php if ($count == 1) : ?>
 
// Insira seu código do AdSense aqui
 
<?php endif; $count++ ; ?>

Mostrar apenas posts de uma determinada categoria
Para isso, é preciso refazer a consulta aos posts, dizendo ao WordPress para apenas recuperar os “n” posts de uma determinada categoria. Esse comando deve vir antes do Loop.

<?php query_posts('category_name=nome_da_categoria&showposts=10'); ?>
[Depois inicia o Loop]

Diferenciar posts de uma determinada categoria
Dentro do loop, é preciso testar se o post pertence à categoria determinada. Se sim, atribuir uma classe CSS. Se não, atribuir outra (a normal).

<!-- Início do Loop -->
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 
 !--< Testa se está na categoria 3. -->
 
 <?php if ( in_category('3') ) { ?>
           <div class="post-cat-three">
 <?php } else { ?>
           <div class="post">
 <?php } ?>

daviwp

Meu nome é Davi Alves desenvolvedor web e WordPress developer, residente de Belo Horizonte, sou um dos organizadores do WordCamp evento oficial do WordPress em BH e co-fundador do Belo Horizonte WordPress Group juntamente com o fundador Mateus Neves, sou articulista de alguns sites, e fundador do daviwp.com, aqui compartilho conhecimentos para toda galera aficionada em WordPress.

  • João

    Davi, será que mudou a forma de criar o single e a page do WordPress?

    Já faz um bom tempo que desenvolvo temas para WP e sempre deu certo com este código.

    Mas, estou penando faz alguns dias para desenvolver um tema, tanto na page quanto no sigle não está dando certo, ou seja, em uma lista de posts ao clicar em um post é exibido o último post, onde deveria exibir o post clicado.
    Nas páginas, a mesma coisa, ao clicar no link de uma pagina o resultado é o último post publicado.

    O que será que está acontecendo? Pode me ajudar?

    Estou rodando o Worpress 3.5.1 (Versão atual) e em um servidor online.

    Desde já agradeço sua ajuda.

    • Davi

      João, tem como eu ver esses codigos? o que mim parece que você não esta criando a pagina single.php, cria uma pagina single, copia e cola o codigo da page.php so para testar e tente,
      se conseguir blz caso não! me envia um link para que eu possa ver o que esta acontecendo ok? abraço!

  • Roberta Rezende Santos

    Muito bacana a explicação! E é possível aumentar o número de posts por páginas no looping para não ter que mudar de página?

    Explico, estou desenvolvendo um site em que a página de resultados só mostra o títulos dos artigos e é um site de empresa, não de conteúdo. Então não é necessário dividir em páginas.

  • Herick Moscardini

    Boa tarde Davi. Também sou de BH. Tenho uma noção menos que básica sobre php e wordpress. Mas estou tentando fazer uma modificação no tema que estou usando. Ja rachei a cuca, e não consigo encontrar uma solução. Parece ser básica, mas não sei nem por onde fazer.

    Eu criei páginas básicas, usando o wp-admin, com informações básica de texto, como o “sobre” e itens dos quais falo no meu blog. Sei essas páginas usam o page.php para forma-las. Vi lá o have_posts() nele e queria usa-lo para listar, abaixo do meu texto padrão, posts que um determinado tag.
    Como se fosse o resultado de uma busca embaixo do meu texto.

    Pensei em copiar o have_posts() do search PHP e usar lá algum filtro de template ou definir parâmetros para a busca. Seria uma “pseudo busca”, ao clicar no link seriam definidos os argumentos de uma busca.

    Mas eu não sei como defino os argumentos sem usar o search submit… na verdade eu nem sei como o submit faz isso…

    Pode me dar uma ideia de como fazer isso?

    Valeu.

    • daviwp

      Olá Herick, manda um email pra me consigo te dar uma atenção melhor.

  • Ivan Oliveira

    Ai Davi mais uma vez me tirando do sufoco rsrs, valeu d+ pelo

    in_category

  • Leandro Bertellotti

    Obrigado amigo, me ajudou muito….sucesso para ti….até mais

  • Olá, estou tentando colocar uma categoria específica neste modelo de loop do meu thema mais não tive sucesso… vc poderia me ajudar por favor?

    ?>

    ‘, ‘]]>’, $page_content);

    endwhile; endif;?>

  • Rodrigo Marques

    Olá, estou tentando fazer um carousel do Bootstrap com 4 posts em cada slider, sou desenvolvedor iniciante e gostaria de saber se vc poderia me ajudar e resolver esse probleminha 🙂

    • daviwp

      Olá Rodrigo, Qual é o problema. Posso te ajudar sim.

  • Thiago Ferreira

    Jura que você recomenda a edição do tema????? Tem certeza que isso é uma boa prática??

    Nada de criar um child_theme ou fazer uso de algum hook para editar o loop?

    • daviwp

      Amigão! Só pra te lembrar que esse tutorial não estamos mexendo em tema padrão do WordPress, esse é um exemplo feito do zero.
      😉 rs.