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: cms, hack, loop, WordPress.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.
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!!!
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 ^^
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?
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”.
Nosssa Ghedin ficou muito legal esse tutorial parabéns…
Posted by Jandeilson
June 30th, 2007, às 11:17 pm. #.
BlogAjuda © 2007.
Simple Grey theme developed by Rodrigo P. Ghedin.