BlogAjuda

Dicas, temas e informações sobre WordPress, blogosfera brasileira e monetização.

Múltiplas chamadas dentro do loop

Rodrigo P. Ghedin WordPress

O título pode parecer estranho. Tá, o título é estranho, mesmo para mim, autor do texto. Enfim, não encontrei nenhum melhor, então, tentarei explicar no próximo parágrafo qual a finalidade deste tutorial.

Imagine que você tenha um blog, e que, na capa, precise chamar duas listas de posts, dentro do conteúdo (ou seja, fora da sidebar), com detalhamento (ou seja, sem poder usar o get_posts). Como fazer? Pois bem, é aqui que este tutorial entra, pois é isso que ensinarei.

Vejam um exemplo. Na capa do WinAjuda, há o trecho denominado Últimas novidades, no qual listo as últimas entradas do site (todas as categorias), e outro, mais abaixo, chamado Artigos recentes, no qual listo apenas posts de uma categoria. Isso é mais simples de fazer do que aparenta ser.

Acho que, a essa altura, todos sabem o que é o loop, não? Não!? Ok, vamos lá. O loop, numa explicação absolutamente simples, é a parte do código PHP responsável por “puxar” os posts do banco de dados, e exibi-los na janela do navegador. Ou seja, você cria um modelo (template), que servirá de bandeja para os posts vindos do banco de dados.

No WordPress, o loop é delimitado pelas seguintes tags:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?> // começo

<?php endif; ?> // fim

A parte legal é que é possível “quebrar” o primeiro código, gerando assim diversas chamadas dentro do loop. Abaixo, mostrarei como isso é feito, passo-a-passo e com comentários:

<?php if (have_posts()) : ?>

A linha acima determina o início do loop. Repare que, agora, ao contrário do primeiro exemplo dado lá em cima, o código está “quebrado”. Parte dele está abaixo…

<?php while (have_posts()) : the_post(); ?>

…Naquilo que eu chamo de começo da primeira chamada dentro do loop.

<div id="post-<?php the_ID(); ?>">
<h1><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<?php the_content(); ?>
</div>

Acima temos o template da primeira chamada. Todos os posts se “encaixarão” nela. O código <?php the_title(); ?> é o que puxa o título do post, e o <?php the_content(); ?>, o conteúdo.

<?php endwhile; ?>

Fim da primeira chamada do loop. E vamos em frente!

<ul>

A idéia é criar, na segunda chamada dentro do loop, uma lista com cinco posts da categoria cuja ID é 2. Como tudo que está dentro da chamada se repete em cada post, os delimitadores da lista (<ul> e </ul>) devem ficar fora dela (da chamada).

<?php query_posts('showposts=5&cat=2'); ?>
<?php while (have_posts()) : the_post(); ?>

A primeira linha é a famosa query post, que neste caso diz ao WordPress que só quer cinco posts da categoria cuja ID é 2. Abaixo, temos o início da segunda chamada dentro do loop, que como podem ver, é idêntica à primeira.

<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>

Template da segunda chamada. Sem segredos, uma lista simples, com o título do post.

</ul>
<?php endwhile; ?>

Fechamos a lista e a segunda chamada dentro do loop.

<?php else : ?>

Este trecho é um “soldado da reserva”: caso nenhum post dos critérios das duas chamadas seja encontrado, a mensagem que vem abaixo dele é exibida. Escreva qualquer coisa, do tipo “o post que você procura não existe ou está em outro lugar”, e pronto.

<?php endif; ?>

Finalmente, o fim do loop.

Simples, não? Para facilitar o entendimento, segue abaixo o código compilado, sem comentários:

<?php if (have_posts()) : ?>

<?php while (have_posts()) : the_post(); ?>

<div id="post-<?php the_ID(); ?>">
<h1><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<?php the_content(); ?>
</div>

<?php endwhile; ?>
<ul>

<?php query_posts('showposts=5&cat=2'); ?>
<?php while (have_posts()) : the_post(); ?>

<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>

</ul>
<?php endwhile; ?>

<?php else : ?>

<o post que você procurar não existe ou está em outro lugar.>

<?php endif; ?>

Para quem pretende transformar o WordPress num CMS completo, este hack (se é que pode ser chamado assim) é indispensável. Torna seu site mais dinâmico e rico, embora, acho eu, consuma mais recursos do servidor. Mas enfim, meça as conseqüências, use-o com bom senso, e corra para o abraço :).

Tags: , , , .

8 comments

Excelente a dica, já pensei em várias utilidades para implementar esse código.

Vai pro Delicious! :P

Um abraço!

Posted by Thiago Mobilon
June 14th, 2007, às 3:10 pm. #.

Ainda sou bem inexperiente em PHP mas sei programar em ASP e um dos professores lógica de programação que tive sempre dizia: “Se dedique a entender a lógica pois linguagem agente aprende fácil” então gostaria de dar uma sugestão aqui que talvez simplifique.

Supondo que estaremos trazendo as informações de um BD não seria mais simples:

1 - Abrir Loop chamada1
2 - campos_ch1
3 - fechar Loop chamada1
4 - abrir Loop chamada2
5 - campos_ch2
6 - fechar Loop chamada2

6 linhas!

Sei que quando vamos traduzir para uma linguagem fica um pouco mais de linhas mas veja em ASP por exemplo ficaria mais ou menos assim:

Bem simples não é?

Como falei sou inexperiente em PHP mas deve existir algum código para abrir o record set que identifica a tabela depois basta fazer o loop com ele.

Amplexos,

Leo Baiano.
http://www.blog.ljunior.com

Posted by Leo Baiano
June 14th, 2007, às 3:39 pm. #.

Um show de codigos em PHP. Nao tão difícil para quem entende e muito complicado para quem nao sabe nada. Mas é um bom contar com mais um dica para customizar e melhorar os nossos blogs.

Quanto eu puder eu implemento no meu blog novo.

Posted by filipe
June 15th, 2007, às 6:17 pm. #.

Valeu, dica fantástica!!! O Rodrigo, bem que você poderia me mandar os themes do Winajuda e do Deskmod por e-mail heim… são belíssimos!!!

Posted by Célio
June 15th, 2007, às 6:27 pm. #.

Eu queria saber como é que ele fez para colocar a tela de login na pagina do Winajuda(Que falando nisso foi removido)

Mas o tutorial ficou ótimo, parabens ^^

Posted by Henrique
June 18th, 2007, às 3:50 pm. #.

Opa.

Então, eu criei algo semelhante. Fiz um template pra uma página, com os query posts primeiro e o conteúdo da página depois. O que acontece? Onde era pra estar o conteúdo da página, aparece o último post publicado. E AGORA, VÉI?

Posted by théo
June 22nd, 2007, às 7:45 pm. #.

Nao para mim! Eu uso mutiplas chamadas no WP Brasil. E se me permite adcionar algo, existe um plugin: Content-extract, que da ainda mais flexibilidade nas multiplas chamadas, e vc pode gerenciar a quantidade de palavras no content sem usar o “the_excerpt”.

Posted by Ale
June 26th, 2007, às 6:58 am. #.

Nosssa Ghedin ficou muito legal esse tutorial parabéns…

Posted by Jandeilson
June 30th, 2007, às 11:17 pm. #.

Leave a comment!



Message



BlogAjuda © 2007.

Simple Grey theme developed by Rodrigo P. Ghedin.

WordPressFAMFAMFAM