Skip to content

Instantly share code, notes, and snippets.

@felipeelia
Created August 4, 2019 13:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save felipeelia/f85bce4bc65acc3c2f0baa7eb38d92a8 to your computer and use it in GitHub Desktop.
Save felipeelia/f85bce4bc65acc3c2f0baa7eb38d92a8 to your computer and use it in GitHub Desktop.
Paginação no WordPress
<?php
/**
* Função para exibir paginação
*
* @param WP_Query $query Query que deverá ser paginada.
* @param integer $range Quantidade de páginas ao redor da página atual.
* @param string $get_param Nome do parâmetro em `$_GET` com o número da página atual.
* @return string HTML com a paginação
*/
function starter_pagination( $query = null, $range = 2, $get_param = null ) {
global $wp_query;
if ( ! $query ) {
$query = $wp_query;
}
// Sem paginação se só tem uma página.
if ( $query->max_num_pages <= 1 ) {
return;
}
if ( $get_param ) {
$paged = $_GET[ $get_param ] ? absint( $_GET[ $get_param ] ) : 1;
} else {
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
}
$max = intval( $query->max_num_pages );
// Adiciona a página atual no array...
if ( $paged >= 1 ) {
$links[] = $paged;
}
// ... e as páginas vizinhas
if ( $paged >= 3 ) {
$links[] = $paged - 1;
$links[] = $paged - 2;
}
if ( ( $paged + 2 ) <= $max ) {
$links[] = $paged + 2;
$links[] = $paged + 1;
}
echo '<ul class="paginacao">' . "\n";
// Página anterior.
if ( $paged > 1 && $max > 1 ) {
printf( '<li class="prevnext"><a href="%s">&lt;</a></li>' . "\n", get_pagenum_link( $paged - 1 ) );
}
// Link para a primeira página e `...` se necessário.
if ( ! in_array( 1, $links ) ) {
$class = ( 1 == $paged ) ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, get_pagenum_link( 1 ), '1' );
if ( ! in_array( 2, $links ) ) {
echo '<li><span class="paginacao-sep">…</span></li>';
}
}
// Link para a página atual com 2 páginas antes e depois, se necessário.
sort( $links );
foreach ( (array) $links as $link ) {
$class = ( $paged == $link ) ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, get_pagenum_link( $link ), $link );
}
// Link para a última página e `...` se necessário.
if ( ! in_array( $max, $links ) ) {
if ( ! in_array( $max - 1, $links ) ) {
echo '<li><span class="paginacao-sep">…</span></li>' . "\n";
}
$class = ( $paged == $max ) ? ' class="active"' : '';
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, get_pagenum_link( $max ), $max );
}
// Link para a próxima página.
if ( $paged < $max ) {
printf( '<li class="prevnext"><a href="%s">&gt;</a></li>' . "\n", get_pagenum_link( $paged + 1 ) );
}
echo '</ul>' . "\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment