Wordpress

WP: Paginação do posts sem Plugin

Eu sempre tive problemas com paginação nos posts. Já usei paginação através do plugin PageNavi, Paginator até ao mais simples dos códigos (o post "anterior e próximo"). Eu até me envergonho por não ter descoberto antes a função de paginação que fica igualzinho ao PageNavi e não é necessário de plugin algum! Comentei no twitter sobre o meu desespero e a @tamaradantas me deu uma luz sobre isso falando que existia uma função para isso sim! Não deu outra e busquei no Google, o nosso grande oráculo da internet, rs. Encontrei o código básico e finalmente conseguir ter a paginação que eu sempre quis ter sem usar nenhum pluguezinho se quer, dê uma olhada como ficou *u*

Para ter esse resultado, procure o arquivo chamado functions.php nos arquivos de seu tema atual e adicione o seguinte código:

function post_pagination($pages = '', $range = 4)
{  
     $showitems = ($range * 2)+1;  

     global $paged;
     if(empty($paged)) $paged = 1;

     if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     }   

     if(1 != $pages)
     {
         echo "<div class='paginacao'><span>P&aacute;ginas</span>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."' class='current'>&laquo;</a>";
         if($paged > 6 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>1</a> <span class='current'>...</span>";

         for ($i=1; $i <= $pages; $i++)
         {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
             {
                 echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";
             }
         }

         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<span class='current'>...</span> <a href='".get_pagenum_link($pages)."'>$pages</a>";
         if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."' class='current'>&raquo;</a>"; 
         echo "</div>";
     }
}

Na primeira linha em $range = 4 troque para o 4 para o número de páginas que você quer que apareça na paginação. Mas lembre-se de que se for para uma página muito avançada irá aparecer 4 páginas antes e 4 páginas depois, como no exemplo abaixo:

Depois de salvada a função, adicione este CSS em style.css de seu tema e modifique as cores da maneira que quiser.

/**** post pagination wordpress - madlyluv.com ***/
.paginacao {
         clear:both;
         padding: 20px 0;
         position:relative;
}

.paginacao span, .paginacao a {
         display:block;
         float:left;
         font: normal 14px georgia, verdana;
         background: #F5F5F5;
         padding: 4px 7px 4px 7px;
         margin: 1px 2px 0 2px;
         text-transform: capitalize;
         color: #AAA;
}

.paginacao span {
         font: bold normal 14px georgia, verdana;
}

.paginacao .current, .paginacao .current a {
         color: #BBB; 
         background: #f0f0f0; 
         padding: 4px 7px 4px 7px; 
         margin: 1px 2px 0 2px; 
         font: bold italic 14px georgia, verdana; 
         text-transform: capitalize;
}

Por último, vá em index.php e adicione o seguinte código abaixo de <?php endwhile; ?>

<?php post_pagination();?>

O tutorial original é do site kriesi.at, cheio de mimimis e explicações difíceis 😒 mas fiz algumas modificações para deixar do jeitinho que eu queria de uma maneira mais simplificada e útil =D

A Tamara também fez um tutorial sobre paginação de posts assim como eu, mas o código dela é diferente. Caso não dê certo este meu código, dê uma passada no tutorial dela. ;D


Comentários

Atenção: Não é possível realizar novos comentários nesta página pois ela será descontinuada em breve, assim como todos os outros tutoriais da sessão Extras.
  • Rodrigo Cardoso

    Olá, no blog que estou fazendo mas não funciona, a minha intenção é colocar paginação no post. Já incluí o código no function.php no style.css e também no archive.php. Não dá erro, nem aparece nada. Sou novo com wordpress, será que estou colocando o código nos arquivos e lugares errados?

    • Aninha

      Rodrigo, talvez você esteja colocando o código no lugar errado. Tente coloca-lo logo depois do fechamento das tags de loop do post. Sugiro também que dê uma olhada nos links mencionados. Talvez o código do tutorial da Tamara dê certo contigo, porque o dela é diferente a função, e ela disse que fez uma correção pra ele funcionar na listagem de artigos.

  • Kellmon

    Paginação , pegue cod que você colocou no blog mas no meu
    não apareceu nada kkk..

    • Aninha

      @Kellmon, seguiu todos os passos corretamente? Você testou a outra dica de tutorial que dei no final do post ? :)

  • Renan

    Oi Aninha, ótima dica!
    Apenas uma correção: na última linha do seu código está escrito assim: echo "n";
    A letra "n" podemos apagar, ela está perdida ali.

    beijos.

    • Aninha

      Oi @Renan! Obrigada por me avisar. Foi um equívoco meu mesmo, hehe. Já corrigi. Obrigada *-*

ir ao topo