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 3cat=-3
» Não exibe posts da categoria com id 3category_name=noticias
» Exibe posts da categoria notíciastag=tecnologia
» Exibe posts com a tag tecnologiaauthor=3
» Exibe posts do usuário com id 3author=-3
» Não exibe posts do usuário com id 3posts_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. 🙂
8 respostas em “Corrigindo bug na paginação do query_posts()”
Resolveu meu problema. Obrigado!
nao está mostrando o código
Corrigido.
Obrigado por avisar!
Era exatamente isso que eu tava procurando!
Uma forma de colocar paginação no meu blog.
Valeu mano, ótimo artigo.
😉
Consegui solucionar o problema!!! coloquei a linha assim:
query_posts(‘cat=4&posts_per_page=10&paged=’.$paged.”); ?>
Concatenei a variavel e funcionou
Opa, desculpe que não percebi a organização do código e não percebi a parte do While…
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.
Opa, eu tive um problema parecido com esse, postei aqui e ninguém até agora soube ajudar. Vê se você consegue:
http://br.forums.wordpress.org/topic/query_post-conflito-com-pagenavi
valew