Olá Wanderson!
Você tem razão. Fazer a paginação pelo Wordpress deu mais trabalho do que seria fazer pelo PHP. Poderia ter pesquisado por um plugin, mas se eu fizer desta forma eu deixo de me divertir :-)
Eu achei vários tutoriais, mas nenhum era do jeito que eu queria, então eu fiz adaptações até chegar no formato desejado.
Vou compartilhar o que eu fiz:
Na index, fiz a seguinte alteração antes de montar a lista:
//Paginacao
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'imovel',
'tax_query' => $taxQuery,
'posts_per_page' => 3,
'paged' => $paged
);
No meu arquivo functions.php, fiz uma função personalizada
function paginar_resultados($query) {
//Se tiver apenas 1 pagina de resultados, nao imprimir
if ($query->max_num_pages < 2 ) {
return;
}
$paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$pagenum_link = html_entity_decode( get_pagenum_link() );
$query_args = array();
$url_parts = explode( '?', $pagenum_link );
if ( isset( $url_parts[1] ) ) {
wp_parse_str( $url_parts[1], $query_args );
}
$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';
$format = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%';
// Criar os links.
$links = paginate_links( array(
'base' => $pagenum_link,
'format' => $format,
'total' => $query->max_num_pages,
'current' => $paged,
'mid_size' => 3,
'add_args' => array_map( 'urlencode', $query_args ),
'prev_text' => __( '← Anterior' ),
'next_text' => __( 'Proximo →'),
'type' => 'list',
) );
$paginador = "";
if ( $links ) :
$paginador .= '<nav class="navigation paging-navigation" role="navigation">';
$paginador .= $links;
$paginador .= '<h1 class="screen-reader-text">Pagina ' . $paged . ' de ' . $query->max_num_pages . '</h1>';
$paginador .= '</nav>';
endif;
return $paginador;
}
Voltando ao index.php, inseri o comando para chamar o paginador no final da lista, passando como parâmetro a variável com o conteúdo atual da página.
<?php
if (function_exists(paginar_resultados)) {
echo paginar_resultados($loop);
}
?>
Para finalizar, precisa estilizar. Segue um exemplo para inserir no arquivo CSS. Mantive os comentários em inglês do original já que eu não fiz nenhum ajuste
/* The containing box with a nice white background */
.paging-navigation {
font-family: sans-serif;
padding: 1em;
background: #fff;
background: hsl(0, 0%, 100%);
}
/* Remove bullets and list indentation */
.paging-navigation ul {
list-style-type: none;
margin: 0;
padding: 0;
}
/* Make the list items appear horizontally */
.paging-navigation li {
display: inline;
}
/* Give each link and the current item some padding to make them easy to click */
a.page-numbers,
span.page-numbers {
padding: .3em .7em;
color: #333;
color: hsl(0, 0%, 20%);
}
/* Link hover state */
a:hover.page-numbers {
color: #000;
color: hsl(0, 0%, 0%);
}
/* Current page bold and dark */
.paging-navigation .current {
font-weight: bold;
color: #000;
color: hsl(0, 0%, 0%);
}