WordPress: Utilizando a função “query_posts” e “wp_reset_query”

Hoje vou falar sobre a função query_posts e a função wp_reset_query disponível no WordPress.

Quando criamos um loop ou inserimos vários loops em nossa página, é comum acontecer erros de exibição de conteúdo.

Tá, mas eu nem sei o que é um loop! Para os navegantes de primeira viagem, loop, no caso do WordPress, são comandos em PHP que tem como função buscar no banco de dados os posts e exibí-los na página.

Já pensou se todos os posts que tivessem de ser adicionados no site fossem inseridos tendo sempre que abrir o código HTML?

Pensando em um site que será sempre atualizado, ficaria inviável sempre ter que recorrer ao arquivo para  a inserção, então, de forma dinâmica, o loop busca na base de dados os posts e depois exibe o seu conteúdo.

Assim, em certas situações teremos a necessidade de modificar o tipo de post que será exibido na nossa página.

Utilizamos então a função

<?php query_posts();?>

Essa função permite a adição de diversos parâmetros, bem como chamar posts de determinada categoria, exibir conteúdo de determinada página, exibir posts ordenados de forma crescente e descrescente, posts com determinadas tags, quantidade de posts a serem exibidos e assim por diante…

A lista é grande e pode ser encontrada na documentação do WordPress.

http://codex.wordpress.org/Function_Reference/query_posts

Exemplo de Loop utilizando a função query_posts:

<?php query_posts(‘posts_per_page=2&category_name=wordpress’);?>
<?php if(have_posts() ) : while(have_posts() ) : the_post();?>
<h2><?php the_title();?></h2>
<?php the_content();?>
<?php endwhile; endif;?>

Nesse exemplo, o wordpress vai buscar no banco de dados todos os posts da categoria “WordPress” e irá exibí-lo na página conforme a formatação que está dentro do loop. Nesse caso, serão exibidos somente dois posts (por causa do parâmetro posts_per_page que limita a quantidade) com o título e o seu respectivo conteúdo.

Já a função wp_reset_query é bastante útil para zerar o banco de dados antes do loop iniciar. É comum ocorrer erros de exibição de páginas, por exemplo, quando se acessa um determinado post e a página requerida, que seria single.php não é exibida, mesmo que a página exista.

Nesse caso, utiliza-se a função wp_reset_query, zerando a consulta no banco, impedindo assim, qualquer conflito que venha ocorrer na busca pelos artigos.

Exemplo:

<?php wp_reset_query();?>
<?php query_posts(‘posts_per_page=2&category_name=wordpress’);?>
<?php if(have_posts() ) : while(have_posts() ) : the_post();?>
<h2><?php the_title();?></h2>
<?php the_content();?>
<?php endwhile;endif;?>

A função wp_reset_query é bastante útil para a criação de um tema wordpress quando se utiliza vários loops. Um exemplo seria um portal com várias categorias (esporte, novela, notícias…). A exibição dos posts de cada categoria deverá ser chamada através do loop do WordPress. Nesse caso, cada categoria será chamada por um loop utilizando-se da função <?php query_posts(); ?>. Os parâmetros que serão passados determinarão o tipo do post que será resgatado no banco e exibido no site. No exemplo citado, category_name seria um parâmetro utilizado em cada loop, modificando somente o nome da categoria da qual os posts serão resgatados. Acima de cada loop, utiliza-se a função <?wp_reset_query();?> para zerar a consulta anterior.

Espero ter ajudado!


6 Comentários

Wallace Silva
1

sinceramente esse wp_reset_query eh uma mao na roda, mas tenho que assumir ja to começando a desanimar de ver códigos do wordpress, assumo que eh bom, mas depois de montar enormes projetos vc muda seus conceitos,
mas valeu a dica Belmonte

Leandro
3

Eu gostaria de saber, uma forma para utilizar esta função, mas que viesse a inserir as postagens por ordem de importância! Seria possível algo com esta possibilidade?

Tácio Belmonte
4

Olá Leandro!Você pode usar o query_posts para consultar os posts ordenando por quantidade de comentários.A quantidade de comentários o torna mais popular e mais relevante.
Use assim:
Ele retornará os posts por odem de comentários do maior para o menor.Você pode limitar usando o posts_per_page também!
Abraço!

rubens
5

Cara, não costumo comentar em sites, mas você quebrou um galhão!! rs tava ficando louco já com posts duplicados… vlw mesmo! Um simples resolveu meus problemas..rs

Cássio
6

Boa noite, tem como eu inserir esse código na index do meu tema, para fazer que somente as postagens de determinadas categorias sejam exibidas na página inicial?

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!