O Uso de certos Plugins é extremamente essencial para o sucesso de um blog WordPress, mas quantos menos plugins usarmos melhor, menos vulnerável fica o nosso site e não corremos o risco de ficarmos com ele lento. Primeiro por que o Google pune sites lentos; segundo por que o público não espera por uma pagina que demora para abrir.
Por esses motivos e mais alguns, é importante estudar e conhecer o core do WordPress cada vez mais e, assim, evitar plugins que fazem mais do mesmo. Sempre que possível, devemos dar preferência às funções nativas.
No desenvolvimento de temas para o WordPress, temos que obrigatoriamente pensar no uso de algumas funções nativas do WordPress, como next_post_link(), previous_post_link(), posts_nav_link() e paginate_links(). É nessa última função que nos vamos concentrar neste artigo e ao longo deste encontro descobriremos o motivo.
O WordPress, por padrão, exibe dez registos de cada vez. Isso é uma configuração que define quantos elementos serão exibidos por página. Logo, quando temos mais de dez registos a serem mostrados precisamos paginar os conteúdos para exibi-los em sua totalidade.
Paginação de conteúdo é muito comum e largamente utilizado em todos os tipos de sites e aplicações web. Existem plugins, como WP-PageNavi, um plugin famoso e muito utilizado com mais de três milhões de downloads, que faz paginação em blog WordPress, mas o que você não sabe é que desde a versão 2.1, lançada em janeiro de 2007, o WordPress implementou uma função nativa, a tal chamada de paginate_links ().
Assim, temos o recurso de paginação com números sem plugin, de forma nativa, sem a preocupação de baixar um recurso adicional, sem se preocupar em atualizar tal recurso e ainda ganhando em performance e segurança.
Como fazer uso desta função nativa do WordPress
1- Coloque o código abaixo no arquivo functions.php do seu tema:
/** Pagination */ function pagination_funtion() { // Get total number of pages global $wp_query; $total = $wp_query->max_num_pages; // Only paginate if we have more than one page if ( $total > 1 ) { // Get the current page if ( !$current_page = get_query_var('paged') ) $current_page = 1; $big = 999999999; // Structure of "format" depends on whether we’re using pretty permalinks $permalink_structure = get_option('permalink_structure'); $format = empty( $permalink_structure ) ? '&page=%#%' : 'page/%#%/'; echo paginate_links(array( 'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ), 'format' => $format, 'current' => $current_page, 'total' => $total, 'mid_size' => 2, 'type' => 'list' )); } } /** END Pagination */
2- Essa função deverá ser chamada logo após o loop, seja ele padrão, personalizado ou adicional. No index.php ou nos restantes ficheiros com paginação, como o category.php etc, só precisam de adicionar o seguinte código.
<?php if (function_exists('pagination_funtion')) pagination_funtion(); ?>
3- Agora só precisamos de adicionar um pouco de estilo à paginação. Para isso adicionamos o seguinte código CSS ao ficheiro style.css.
/** =Paginate links Styles ******************************************* **/ .page-numbers { float: left; margin-top: 10px; } .page-numbers li { display: inline-block; margin-left: 3px; } .page-numbers a, .page-numbers .dots, .page-numbers .next, .page-numbers .prev { padding: 3px 5px; background: #eee; text-decoration: none; } .page-numbers a:hover, .page-numbers .next:hover, .page-numbers .prev:hover { background: #666; } .page-numbers .current { padding: 3px 5px; background: #666; color: #27B3CF; }
E você costuma usar WP-PageNavi? Conhecia esta função nativa do WordPess? Comente!
Um abraço e até já!
14 comentários a “WordPress: paginação WordPress fácil, sem plugins”
Não funcionou comigo. Quando chamo a página 2, ele dá erro de página não encontrada.
Realmente encontrei alguns errinhos, mas coisa boba. A mecânica funcionou adequadamente. Vlw!
Obrigado, funcionou direitinho :P
Não achei o erro, pra mim também não está passando para a página seguinte. Poderia mostrar onde está o problema do script? Obrigado!
Muito bom! Valeu!
Galera o problema ta no loop,
Coloque esse Loop aqui em forma de array
‘post’, ‘showposts’ => 1, ‘paged’=>$paged ));
while ($wp_query -> have_posts()) : $wp_query -> the_post();
?>
e vai funcionar ;)
Acredito que estou com o mesmo problema amigo.. Só que não intendo a parte do código que você postou ai.. poderia postar o código completo? Obrigado!
Booooooa jovem!
Valeu pela dica, comigo funcionou corretamente!
Obrigado!
Muito obrigado ai Vitor, seu tutorial me ajudou muito, procurando resolver o problema sozinho, vi que o wordpress tinhas essas funções prontas, mas não sabia como trazer ela para o meu tema, não tive que fazer nada, só colocar o que você falou, a paginação nos temas depende um pouco do tema, de como foi construído o tema. Vlw aew!
ei pessoal o meu ta dando certinho, mas quando vai para as próximas paginas perde o estilo css do bloco, já aconteceu isso com alguém?
Valeu! Estava precisando dessa função, não queria usar plugin.
Abraço.
Muito obrigado por compartilhar o código, foi bastante útil no meu projeto, ajustes no CSS sempre serão necessários, mas a iniciativa está de parabéns. Valeu
Muito bom o scripts. Mais tive um problema porque meu blog ele deixa o post no topo com melhor avaliação no voto pelo query_posts e quando eu vou para página 2 ainda continua o post com a melhor avaliação. Você sabe me dizer se tem alguma solução pra esse problema ? Obrigado fico agradecido desde já.
Perfeito, tentei vários códigos de vários blogs e esse foi oq funcionou melhor pra mim.