Obtener el número de página actual

15

En una situación en la que uno tiene 20 publicaciones por página. Me gustaría obtener el número de página actual para hacer algunos enlaces de página agradables en la parte inferior. ¿Cómo se obtiene la página actual? Probé esto

<?php echo '(Page '.$page.' of '.$numpages.')'; ?>

y solo dice la página 1 de 1 en cada página.

Algunas ideas,

Maravilloso

Robin I Knight
fuente

Respuestas:

23

Cuando WordPress usa la paginación de esta manera, hay una variable de consulta $pagedque activa. Entonces la página 1 es $paged=1y la página 15 es $paged=15.

Puede 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 publicaciones en la base de datos. Luego, filtra por qué publicaciones se publican (frente a cuáles son borradores, programados, basura, etc.). Luego debe dividir este recuento por la cantidad de publicaciones que espera 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 );

Todavía no lo he probado, pero es posible que deba buscarlo de $posts_per_pagela misma manera que lo hizo $paged(usando get_query_var()).

EAMann
fuente
8
¿Por qué no usar $wp_query->max_num_pages?
t31os
1
Esa es una buena alternativa. Parte de lo $wp_queryque olvidé por completo estaba allí: - /
EAMann
@EAMann BTW: también existe la found_postspropiedad "El número total de publicaciones encontradas que coinciden con los parámetros de consulta actuales", wp_count_posts () es una especie de sobrecarga.
jave.web
8

Puede hacerlo con una sola línea de código, pero nuevamente, es posible que desee 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 'Page ' . $page . ' of ' . $pages;
}

NOTA: El código puede ir a su archivo de funciones.

Simplemente llame a la función donde desea mostrar el mensaje "Página x de y", por ejemplo.

<?php current_paged(); ?>

Si necesita el código para trabajar con una consulta personalizada, es decir. uno que haya creado usando WP_Query, luego simplemente pase 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..

Obtener la página actual para la consulta personalizada utilizando la función publicada anteriormente.

<?php current_paged( 'fred' ); ?>

Si desea olvidarse por completo del soporte de consultas personalizadas y está buscando una respuesta, entonces esto debería hacerlo.

<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>

Espero que ayude.. :)

t31os
fuente
1
Si fuera usted, comprobaría si $vares una consulta: if( is_a( $var, 'WP_Query' ) )devolverá verdadero si se trata de un objeto de consulta.
John P Bloch
Sí, esa es realmente una idea muy sensata, ¡listo!
t31os
0

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

global $wp_query

$wp_query->max_num_pages
Alex Standiford
fuente
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 = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; 

}

Primero consulte si hay más de una página en esto wp_query, luego concatene el título con la página actual vía $paged_current_pagey el total de páginas con $title_page_nrs. Finalmente echoella. Si es superior a 1 página primero, luego elsesi no está paginado. Esto va a mi archivo.php o plantillas para este tipo. Produce:

<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>

o

<title>Taxonomy title | Your Website Name</title>

andyNilson
fuente