Ya publicamos hace unos meses una solución para combinar los parámetros paged
y offset
de un loop con query_posts
en WordPress. Publicamos ahora otra solución más sencilla que funciona a la perfección con una paginación de previo-siguiente o numérica.
En el caso de una paginación numérica basta modificar el parámetro total
de la función paginate_links()
, que indica el total de páginas en las que se partirá el loop. WordPress calcula las páginas, él solito, dividiendo el total de posts del loop entre el valor que hayamos asignado al parámetro showposts
(en versiones de WordPress anteriores a la 2.1) o posts_per_page
en query_posts
.
Para un loop como el siguiente:
global $query_string; query_posts( $query_string . "&posts_per_page=5&offset=5" );
Definiremos total
de la siguinete manera:
$total = $wp_query->max_num_pages - 1;
En vez de la manera usual:
$total = $wp_query->max_num_pages;
De manera que la paginación numérica, mediante paginate_links
, quedaría:
global $wp_rewrite; $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; $total = $wp_query->max_num_pages - 1; $pagination = array( 'base' => '%_%', 'format' => '', 'total' => $total, 'current' => $current, 'show_all' => false, 'prev_text' => __('Anterior'), 'next_text' => __('Siguiente'), 'type' => 'plain', ); if( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg('s',get_pagenum_link(1) ) ) . "page/%#%/", 'paged'); if( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array('s'=>get_query_var('s')); echo paginate_links($pagination);
Otras soluciones que nos han inspirado, aunque no nos han acabado de funcionar, pero quizás a ti sí:
ACTUALIZACIÓN 2 de marzo de 2012: La solución de offset con paginación numérica que mejor me funciona combina la receta que comento arriba de modificar la variable $total
que define las páginas en las que se dividirá el loop, con la que publiqué previamente a cerca de cómo conseguir un loop con offset y paginación. Para que la cosa funcione hay que aplicar ambas recetas.