Obtener el Número de Página Actual
En una situación donde se muestran 20 publicaciones por página. Me gustaría obtener el número de página actual para crear unos bonitos enlaces de página en la parte inferior. ¿Cómo se obtiene la página actual? Probé esto:
<?php echo '(Página '.$page.' de '.$numpages.')'; ?>
y solo muestra "Página 1 de 1" en todas las páginas.
¿Alguna idea?
Maravilloso

Cuando WordPress utiliza paginación de esta manera, hay una variable de consulta llamada $paged
en la que se basa. Así, la página 1 es $paged=1
y la página 15 es $paged=15
.
Puedes obtener el valor de esta variable con el siguiente código:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Obtener el número total de páginas es un poco más complicado. Primero tienes que contar todas las entradas en la base de datos. Luego filtrar por las entradas que están publicadas (frente a las que son borradores, programadas, en la papelera, etc.). Después tienes que dividir este conteo por el número de entradas que esperas que aparezcan en cada página:
$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );
No lo he probado aún, pero puede que necesites obtener $posts_per_page
de la misma manera que obtuviste $paged
(usando get_query_var()
).

Es una buena alternativa. Parte de $wp_query
que se me había olvidado por completo que estaba ahí :-/

Podrías hacerlo con una sola línea de código, pero de nuevo, quizás quieras agregar el código en otros lugares, por lo que una función suele ser más útil.
function current_paged( $var = '' ) {
if( empty( $var ) ) {
global $wp_query;
if( !isset( $wp_query->max_num_pages ) )
return;
$pages = $wp_query->max_num_pages;
}
else {
global $$var;
if( !is_a( $$var, 'WP_Query' ) )
return;
if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
return;
$pages = absint( $$var->max_num_pages );
}
if( $pages < 1 )
return;
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo 'Página ' . $page . ' de ' . $pages;
}
NOTA: El código puede ir en tu archivo de funciones.
Simplemente llama a la función donde quieras mostrar el mensaje "Página x de y", por ejemplo:
<?php current_paged(); ?>
Si necesitas que el código funcione con una consulta personalizada, es decir, una que hayas creado usando WP_Query
, simplemente pasa el nombre de la variable que contiene la consulta a la función.
Ejemplo de consulta no existente:
$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() )
... etc..
Obteniendo la página actual para la consulta personalizada usando la función publicada anteriormente...
<?php current_paged( 'fred' ); ?>
Si quieres olvidarte por completo del soporte para consultas personalizadas y buscas una solución de una sola línea, esto debería funcionar...
<?php echo 'Página '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' de ' . $wp_query->max_num_pages; ?>
Espero que te ayude... :)

De la documentación de WordPress paginate_links( string|array $args = '' )
:
<?php
global $wp_query;
$big = 999999999; // necesitamos un número improbable
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
?>
Esto mostrará la lista de números de página y los enlaces a Siguiente publicación y Anterior publicación. Debes colocar este código en las páginas donde quieras que se muestren los números de página.

Una opción que funciona en todas mis páginas de archivo es esta:
$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;
if ( $paged_maxnum > 1 ) {
$paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$title_page_nrs = 'página nº ' . $paged_current_page . ' de ' . $paged_maxnum;
echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Tu Nombre de Sitio Web</title>';
} else {
echo '<title>' . get_the_archive_title( '', false ) . ' | Tu Nombre de Sitio Web</title>';
}
Primero consulta si hay más de una página en esta wp_query
, luego concatena el título con la página actual a través de $paged_current_page
y el total de páginas con $title_page_nrs
. Finalmente lo muestra con echo
. Si hay más de 1 página muestra el primer formato, si no, muestra el segundo. Esto va en mi archive.php o plantillas para este tipo. Produce:
<title>Título de taxonomía - página nº 1 de 4 | Tu Nombre de Sitio Web</title>
o
<title>Título de taxonomía | Tu Nombre de Sitio Web</title>
