Quarta-feira, 25 de novembro de 2009 às 11h15

Personalizando o Loop

Para quem desenvolve em WordPress o mais importante é entender como funciona o loop, a estrutura responsável por carregar os posts no WordPress. Ele funciona em todos os templates do tema, por isso é tão importante. O que alimenta a consulta do loop são os parâmetros passados no endereço do site, carregados cronologicamente por padrão.

Por exemplo: Ao acessar o endereço http://www.dominio.com/?cat=1, estaremos passando para o loop cuja categoria é igual a 1, assim, o loop irá carregar os posts que estejam dentro dessa categoria apenas.

Todos os resultados obtidos com a consulta são armazenados em um array chamado $posts e a cada volta do loop a chave do array é incrementada. Dessa forma, precisamos somente de uma estrutura de repetição que monte o conteúdo de cada post dentro da nossa interface. Para facilitar ainda mais, o WordPress disponibiliza duas funções que fazem quase todo o trabalho para nós, são elas:

  • have_posts(), que verifica se ainda existem posts no array; e
  • the_post(), que carrega os dados do post da vez.

A estrutura mais utilizada nos temas do WordPress é:

<?php while(have_posts()) : the_post(); ?>
trecho da interface a ser repetido...
<?php endwhile; ?>

Traduzindo para o programês, ficaria assim:

<?php enquanto(houverem_posts()) : carregue_o_post_da_vez(); ?>
trecho da interface a ser repetido...
<?php verifique_se_ainda_há_posts; ?>

Dentro do loop estarão disponíveis os atributos do post da vez, esses atributos podem ser acessados utilizando as funções the_title(), the_permalink(), the_content(), para citar algumas. Sabendo disso, para montar um template que mostre o título, o autor e a data de publicação de um post precisaríamos simplesmente adicionar as respectivas funções nos locais apropriados. Segue mais um exemplo:

<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p class="data"><?php the_time(); ?></p>
<p class="autor"><?php the_author(); ?></p>
<?php endwhile; ?>

Personalizando

Após entender como o Loop funciona, já podemos começar a brincar com o WordPress controlando o conteúdo a ser carregado ou filtrado. Mais uma vez o WordPress facilita a vida dos desenvolvedores disponibilizando a função query_posts().

Essa função permite criar parâmetros de consulta ou adicionar novos parâmetros aos passados via endereço do navegador, dessa forma você pode excluir uma categoria da pesquisa, reordenar os posts, limitar a quantidade de resultados, entre outras coisas.

O funcionamento do query_posts é simples, apenas adicione a função 'query_posts('args')' antes da função 'have_posts()' substituindo o args pelos argumentos desejados à sua consulta. Dessa forma o 'have_posts()' irá ignorar os parâmetros passados pelo endereço e fará uma consulta baseada nos dados informados. Por exemplo, se você quer listar três posts aleatórios da categoria 'destaques', o script seria assim:

<?php query_posts("&orderby=rand&showposts=3&category_name=destaques"); ?>
<?php while(have_posts()) : ?>
trecho da interface a ser repetido...
<?php endwhile; ?>

Note que cada atributo é separado pelo & assim como nos parâmetros passados via url. Dessa forma os desenvolvedores se sentem mais familiarizados com o código e não precisam ficar decorando a ordem dos atributos nem se preocupar em anular os que não serão usados.

Caso a sua intenção seja apenas filtrar os resultados de uma busca, adicione a variável '$query_string' à sua função query_posts, dessa forma o WordPress mescla os seus argumentos com os argumentos da página. Essa variável é muito importante quando você pretende manter a navegabilidade, como é o caso dos resultados de uma pesquisa ou do conteúdo da página inicial do site. Para exemplificar, segue como seria o script para retirar uma categoria dos resultados de uma pesquisa:

<?php query_posts("{$query_string}&cat=-3"); ?>
<?php while(have_posts()) : ?>
trecho da interface a ser repetido...
<?php endwhile; ?>

Esse script deve ficar no arquivo search.php, então os posts encontrados na categoria 3 não aparecerão nos resultados das pesquisas e a paginação dos resultados continuará funcionando.

3 comentários

 William Franklin
08/02/2010 13h49

Alterando query-post() em uma área específica do tema

Estou implementando um carrocel de destaques no meu tema e gostaria de personalizar o loop apenas na div onde vai estar o carrocel, mas não tenho a mínima idéia de como faço isso.
Agradeço se você puder me ajudar e parabéns pelo ótimo artigo.

 Marcelo Mesquita
08/02/2010 13h58

Multiplos Loops

Oi William,
escrevi um post explicando isso no meu blog (http://marcelomesquita.com/multiplos_loops/).

Qualquer coisa é só avisar.

 William Franklin
08/02/2010 14h12

Alterando query-post() em uma área específica do tema (Resolvido)

Funcionou perfeitamente Marcelo, era exatamente o que eu estava precisando.

VLW mesmo, abração.

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Marcelo Mesquita é formado em Desenvolvimento de Sistemas para a Web e há mais de cinco anos trabalha com desenvolvimento de sites. Nos últimos dois anos tem seu foco no WordPress: montagem de temas, desenvolvimento de plugins, scripts, widgets e performance.

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.