Paginación con WP_Query()

Este código muestra como hacer la paginación con los post usando WP_Query() en WordPress, en este caso se filtra por una categoría específica. Sigue el enlace para ver los demás parámetros que soporta WP_Query().

Primero, asignamos una variable para filtrar la paginación dentro del query y como WP_Query() es una clase le pasamos como parámetro $wp_query, y para paginar $paged.

$wp_query = new WP_Query('cat=873&paged=' . $paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
					
    // hacemos el loop normal, the_title(), the_permalink(), etc.

endwhile;

Si tienes dudas de como hacer el Loop en wordpress, solo entra en este post Guía Rápida del Loop de WordPress

Paginando el contenido

Segundo, luego de hacer la llamada de los post arriba, ahora se determina el número de páginas, como página actual y el número máximo de páginas.

Declaramos una variable $max_page y la pasamos el valor de $wp_query haciendo referencia a la clase max_num_pages.

		
<?php $max_page = $wp_query->max_num_pages;
if (!$paged && $max_page >= 1) {
    $current_page = 1;
}
else {
    $current_page = $paged;
} ?>

<div class="page-nav fix">
    <div class="suf-page-nav fix">
        <span class="page-index"><?php printf(__('Pagina %1$s de %2$s'), $current_page, $max_page); ?></span>
	<?php echo paginate_links(array(
	"base" => add_query_arg("paged", "%#%"),
	"format" => '',
	"type" => "plain",
	"total" => $max_page,
	"current" => $current_page,
	"show_all" => false,
	"end_size" => 2,
	"mid_size" => 2,
	"prev_next" => true,
	"next_text" => __('Anteriores'),
	"prev_text" => __('Recientes'),
	)); ?>
	
	<?php wp_reset_query(); ?>
    </div>
</div>

Referencias sobre Paginate Links

Algunas referencias para hacer la paginación con WP Pagenavi.

El código final quedaría así:

<?php $wp_query = new WP_Query('cat=873&paged=' . $paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
    // algunas cosas comunes del loop
endwhile; ?>
			
<?php $max_page = $wp_query->max_num_pages;
if (!$paged && $max_page >= 1) {
    $current_page = 1;
}
else {
    $current_page = $paged;
} ?>

<div class="page-nav">
    <div class="page-nav-2">
        <span class="page-index"><?php printf(__('Pagina %1$s de %2$s'), $current_page, $max_page); ?></span>
	
        <?php echo paginate_links(array(
	"base" => add_query_arg("paged", "%#%"),
	"format" => '',
	"type" => "plain",
	"total" => $max_page,
	"current" => $current_page,
	"show_all" => false,
	"end_size" => 2,
	"mid_size" => 2,
	"prev_next" => true,
	"next_text" => __('Anteriores'),
	"prev_text" => __('Recientes'),
	));
	?>
	<?php wp_reset_query(); ?>
    </div>
</div>
Recomendado
  • Jose

    Muchas gracias por la ayuda. Un código muy útil.