Hoje abordarei um assunto complexo, mas que, quando entendido, expande o nÃvel de personalização do WordPress a patamares inimagináveis. A mágica é conseguida através do recurso query posts. Não sei o porquê deste nome, nem como funciona tecnicamente; só sei que é útil, e ao contrário do que parece à primeira vista, é fácil de usar.
Aos que entendem o idioma do tio Sam, recomendo a leitura deste artigo da Codex, extremamente detalhado e que serviu de base para este que você está lendo.
Através da (ou seria do?) query posts, é possÃvel fazer, diretamente no sistema, alterações possÃveis através da URL e/ou das opções, porém sem mudá-las. Há inúmeras possibilidades de uso, graças à s diversas variáveis suportadas. Destaco algumas:
No decorrer do artigo, usarei exemplos práticos para ilustrar e facilitar a compreensão das hipóteses.
Antes de tudo, é necessário identificar o loop. O loop é um trecho existente nos arquivos que exibem diversos posts simultaneamente, como o index.php, category.php, archive.php e search.php. Este trecho é o responsável por ir ao banco de dados, e puxar os dados dos posts, exibindo-os ordenadamente e através do código escrito dentro dele. Veja um exemplo de loop:
<?php while (have_posts()) : the_post(); ?>
<li class=”lista_noticias”><span class=”data”><?php the_time(’d/m/y’) ?></span> <a href=”<?php the_permalink() ?>”><?php the_title(); ?></a> <small><a href=”<?php the_permalink() ?>#comments” title=”Comentários”><em>(<?php comments_number(’0′,’1′,’%'); ?>)</em></a></small></li>
<?php endwhile; ?>
</ul>
<p class=”esquerda”><a href=”/category/noticias/”>Mais notÃcias…</a></p>
<?php else : ?>
<h2 class=”center”>Not Found</h2>
<p class=”center”>Sorry, but you are looking for something that isn’t here.</p>
<?php include (TEMPLATEPATH . “/searchform.php”); ?>
<?php endif; ?>
Vamos tentar entendê-lo?
Encontrou as tags <ul> e </ul>? Abaixo da primeira tem inÃcio o loop (<?php if (have_posts()) : ?>), que termina exatamente acima da segunda (<?php endwhile; ?>). O que vem abaixo da tag <?php else : ?> é uma espécie de quebra-galho. Falando em bom português, caso nenhum artigo seja encontrado no banco de dados, a famigerada mensagem de desculpas aparecerá.
No navegador, o código acima retorna o seguinte resultado:

Porém, aquele código não é tudo. Nas configurações do blog, está marcado, no item Show at most, dez posts. Isso significa que o WordPress deve exibir, em cada página de Ãndice, como a mostrada acima, dez textos, ou no caso, dez headlines. Além disso, no exemplo acima só estão listados posts de uma categoria; o blog em questão tem catorze. Sim, caro leitor, o responsável por essa customização é a query post.
Agora que você já sabe que o loop se inicia na linha <?php if (have_posts()) : ?> (ou qualquer coisa parecida com isso), abra o editor de temas do seu blog e navegue até uma das páginas já mencionadas que o contêm. Localizado o inÃcio do loop, insira, imediatamente antes dele, a seguinte tag:
<php query_posts() ?>
Simples, não? Sim, é simples mesmo. O uso de query post é exatamente este: inserir a tag antes do inÃcio do loop. Evidente que, do modo como ela está mostrada ali em cima, não produzirá efeito algum. É aà que entram os atributos da query post. Vejamos um exemplo prático, pegando o gancho explicado acima (vinte e cinco posts, e apenas a categoria 1); o código seria este:
<?php query_posts('posts_per_page=25&cat=1'); ?>
Entendeu o funcionamento? O atributo posts_per_page=25 diz ao sistema para que ele retorne os vinte e cinco últimos textos, e o cat=1 limita a exibição somente à categoria cuja ID é 1. O & não tem função definida, serve apenas para fazer com que dois ou mais atributos sejam interpretados simultaneamente.
Dito isto, e dentro dos atributos disponÃveis, as possibilidades são inúmeras! Vejamos mais alguns exemplos:
<?php query_posts('cat=3&year=2004'); ?><?php query_posts('order=ASC&posts_per_page=12&author=3') ?><?php query_posts('page_id=7') ?>Lembrando que o ID é um número que é atribuÃdo a todos os posts, páginas, categorias e autores. Na área Manage, do painel administrativo, é possÃvel identificar o ID de tudo isso que foi citado.
Farei, brevemente, uma listagem dos atributos que conheço. Acompanhe:
p=1name=first-postpage_id=7pagename=aboutshowposts=1posts_per_page;author=3author_name=Harriethour=11minute=59second=30day=15monthnum=12year=2005order=ASCASC por DESC).cat=1-1), exibe todas as categorias, menos a cuja ID é 1.Ufa, é realmente bastante coisa. E há mais, acredite! Só com a ajuda das query posts é possÃvel transformar o WordPress, nativamente um sistema de blogs, em um portal completo. Veja um exemplo.
O artigo original, já mencionado, se não for mais completo, é mais direto, e traz vários exemplos práticos, uns bem desenvolvidos, utilizando técnicas cujas quais eu não domino (e, portanto, não abordei aqui). Vale a pena dar uma olhada.
Este é um assunto muito procurado nos fóruns de suporte em que participo. Espero, com este texto, ter sanado o básico, e aberto caminho para seus estudos. Teste, erre, improvise, arrisque: o resultado vem, pode apostar.
Muito boa a explicação, dá pra fazer praticamente tudo com o Wordpress. Com esse seu texto dá pra tirar da cabeça de muita gente que o Wordpress é só para blogs!!!
Posted by Pedro Rogério
September 23rd, 2006, às 2:02 pm. #.
Muito bom! parabéns
Posted by Thalis Valle
September 26th, 2006, às 11:39 pm. #.
Cara, não acho às tags no index.php, nem nos outros, olhe como está meu index.php:
INDEX.PHP
“>
” rel=”bookmark” title=” “>
“>
|
Aguardo retorno!
Puxa, Ro, valeu pelas dicas, ainda mais quando decido ‘ler poesias’ para deixar meu blog bem legal. Vai ajudar bastante ;)
bjsss
Posted by Cris Zimermann
October 3rd, 2006, às 10:41 pm. #.
É… Meu comentário foi cortado! :|
De qualquer maneira, consegui! :D
é Tentei inserir o codigo citado para que os posts fossem mostrados como demonstra a imagem, mais não consegui.
Inseri o codigo disponivel e um erro apareceu,tenho que alterar algo no codigo?
Queria que os posts fossem mostrados como na imagem
(Data)-Titulo linkado para o post.
e agora?
Ghedin,
O nome é query_posts pq esse código gera uma query no MySql, que é responsável por fazer a busca.
Esse query_post é como se fosse um “select * from noticias where author=3″ por exemplo.
Abs!
Posted by Tonobohn
January 11th, 2007, às 10:08 pm. #.
[…] informar que não vou reinventar a roda. Existe um ótimo artigo escrito pelo Rodrigo Ghedin no Blogajuda. Quero fazer aqui apenas algumas observações para o uso desta poderosa tag. A forma de uso está […]
Posted by Um pouco mais de query_posts() at wp help
February 4th, 2007, às 3:43 am. #.
é meio complicado até conseguir configurar,mais vale a pena
Posted by Everton
March 24th, 2007, às 7:52 pm. #.
[…] Artigo Orignal […]
Posted by Blog Way » Blog Archive » Query Posts: personalizando as páginas do WordPress
April 2nd, 2007, às 9:09 pm. #.
Puxa, eu já criei um tema novo para meu website e estou trabalhando na “personalização” das páginas, fixei uma página estática chamada e home para a página inicial, e gostaria de colocar os 2 últimos posts como “Novidades” ou “Noticias” tanto faz. Eu queria colocar os posts normal, com tÃtulo, data e resumo… mas quando insiro o código no editor do wordpress dá erro, ele não interpreta o php, e eu instalei o runphp.
Se tiver como me ajudar de alguma forma, agradeço! :)
Posted by Areta do Bem
May 3rd, 2007, às 4:09 pm. #.
[…] 10 posts por página e somente da categoria 2). Caso queira saber mais sobre queryposts acesse este link, muito […]
Posted by Um site muito bom, o Fowtec.com!
December 13th, 2007, às 2:05 pm. #.
oi rodrigo. legal o post. eu estou montando um site com o word press e me deparei com um problema. nas opções de leitura eu escolhi a página “perfil” (estática) para ser visuallizada como página inicial. porém, com isso a “home”, que tem os posts também está mostrando o cónteúdo da página ‘perfil’. então é como se tivessem 2 páginas ‘perfil’ e a ‘home’ não mostra mais os posts. como arrumo isso? achei que fosse do tema, pra ver se era diferente a index.php da page.php mas mesmo com outros temas isso se repete. na verdade eu preciso manter a perfil como a inicial, mas também preciso que a home mostre os posts…
se puder ajudar, agradeço desde já!
valeu! e parabéns pelos posts!!
Posted by marcelo araujo
March 11th, 2008, às 11:39 am. #.
Marcelo Araújo, desculpa me meter, mas acho que isso pode lhe ajudar:
http://pt-br.forums.wordpress.com/topic.php?id=223&replies=2#post-573
Posted by João Grando
March 18th, 2008, às 11:47 am. #.
Grande João Grando!! deu certo! valeu demais!!!
outra solução que encontrei é ir no arquivo ‘header.php’ ou cabeçalho e tirar na mão mesmo o link home, caso queira desativá-lo.
Mas sua solução é mais fácil.
Abraço!!
Posted by marcelo araujo
March 18th, 2008, às 12:38 pm. #.
Posso inserir esse código php (query_post) direto na caixa de HTML da uma página que eu criei , por exemplo Lista de arquivos com a tag “tal”, ou tenho que criar especificamente um arquivo php e utilizar o include? Sabe me dizer?
Cara…viajei total!!!
já coloquei tag query ante do loop assim:
mas onde eu insiro essa tag:
essa é a duvida!!
Posted by Filipe Frade
March 27th, 2008, às 5:40 pm. #.
oxmeqr fdaslgvk txcgfr deyb ucjpnl brpyucixt jlhd
Posted by clqdnage acrqjn
June 20th, 2008, às 10:51 pm. #.
watch tom we cube speed key night greed america keyboard girl
Posted by stonemangree
June 27th, 2008, às 2:01 pm. #.
english england frog white night mail
Posted by womanwaterfr
July 8th, 2008, às 10:53 am. #.
black elephant jhon right student juicy
Posted by oceanwoodwom
September 2nd, 2008, às 10:01 pm. #.
BlogAjuda © 2007.
Simple Grey theme developed by Rodrigo P. Ghedin.