Obtener el Número de Página Actual

18 mar 2011, 15:16:23
Vistas: 88.1K
Votos: 24

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

0
Todas las respuestas a la pregunta 6
3
39

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()).

18 mar 2011 16:01:54
Comentarios

¿Por qué no usar $wp_query->max_num_pages?

t31os t31os
18 mar 2011 17:47:01

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

EAMann EAMann
18 mar 2011 19:49:32

@EAMann Por cierto: también existe la propiedad found_posts "El número total de publicaciones encontradas que coinciden con los parámetros de consulta actuales", wp_count_posts() es un poco excesivo.

jave.web jave.web
13 mar 2017 16:31:26
2

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... :)

18 mar 2011 16:06:00
Comentarios

Si fuera tú, verificaría si $var es una consulta: if( is_a( $var, 'WP_Query' ) ) devolverá verdadero si es un objeto de consulta.

John P Bloch John P Bloch
18 mar 2011 16:30:23

Sí, esa es realmente una idea muy sensata, ¡hecho!.

t31os t31os
16 abr 2011 13:18:49
0

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.

10 may 2021 12:35:19
0

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>

24 nov 2019 08:17:31
0
$pagina = max( 1, get_query_var( 'paged' ) );
29 feb 2024 12:03:01
1
-1

Como se mencionó anteriormente, una forma más sencilla de obtener el número máximo de páginas es con:

global $wp_query

$wp_query->max_num_pages

20 feb 2019 01:58:18
Comentarios

Aunque esto es correcto, la pregunta era sobre cómo obtener la página actual.

Loosie94 Loosie94
15 abr 2024 11:25:48