Corrigindo bug na paginação do query_posts()

Quem utiliza a tag query_posts() no WordPress, algum dia já deve ter reparado que, ao usá-la, a paginação deixa de funcionar. Ou seja, ao clicar em “Próxima Página” a página que será carregada exibirá os mesmos posts da primeira.

Pesquisando sobre o assunto, achei uma solução simples e funcional, que explicarei logo a seguir. Mas antes de mais nada, para quem não conhece os query_posts(), segue uma explicação rápida:

Query_posts()

O query_posts() pode ser usado para controlar quais posts serão exibidos no Loop. Por aceitar vários tipos de parâmetros, ele pode ser utilizado de diversas maneiras diferentes.

Com isso você pode personalizar as entradas do seu blog para, por exemplo, exibir apenas posts de uma categoria específica em sua home.

Principais parâmetros
Para conhecer todos os parâmetros, acesse a página Template Tags/Query_Posts no codex do wordpress.

  • cat=3 » Exibe posts da categoria com id 3
  • cat=-3 » Não exibe posts da categoria com id 3
  • category_name=noticias » Exibe posts da categoria notícias
  • tag=tecnologia » Exibe posts com a tag tecnologia
  • author=3 » Exibe posts do usuário com id 3
  • author=-3 » Não exibe posts do usuário com id 3
  • posts_per_page=10 » Exibe 10 posts por página

Exemplo
Exibir 10 posts por página da categoria 4

<?php if(have_posts()) : query_posts('cat=4&posts_per_page=10'); ?>

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

// aqui vai o código do post

<?php endwhile; ?>

<?php endif; ?>

.

Corrigindo o bug

Para corrigir o bug da páginação é muito simples, basta substituir essa linha do Loop:

<?php if(have_posts()) : query_posts('cat=4&posts_per_page=10'); ?>

Por essa:

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

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts("cat=4&posts_per_page=10&paged=$paged"); ?>

.
Bom galera, por enquanto é isso. Espero ter ajudado e, como sempre, qualquer dúvida/problema é só deixar um comentário. 🙂

Deixe uma resposta

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

8 comentários em “Corrigindo bug na paginação do query_posts()”

  1. Não funcionou kra!!!
    Na solução você não especificou o While, está correto. Mas de toda forma, tentei com While e não. E sem While nem mostra post algum.

    E da forma explicada com While, você avança as páginas mas elas não mostram os posts sequentes.