WordPress: paginação WordPress fácil, sem plugins

wordpress paginate_links

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

  1. Everaldo diz:

    Não funcionou comigo. Quando chamo a página 2, ele dá erro de página não encontrada.

  2. Danilo diz:

    Realmente encontrei alguns errinhos, mas coisa boba. A mecânica funcionou adequadamente. Vlw!

  3. Leandro diz:

    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!

  4. Claudio diz:

    Muito bom! Valeu!

  5. Gustavo diz:

    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 😉

  6. 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!

  7. evandro diz:

    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?

  8. Valeu! Estava precisando dessa função, não queria usar plugin.

    Abraço.

  9. 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

  10. 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á.

  11. Hellê diz:

    Perfeito, tentei vários códigos de vários blogs e esse foi oq funcionou melhor pra mim.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *