Ottenere il Numero della Pagina Corrente

18 mar 2011, 15:16:23
Visualizzazioni: 88.1K
Voti: 24

In una situazione dove ho 20 post per pagina. Vorrei ottenere il numero della pagina corrente per creare dei bei link di paginazione in fondo alla pagina. Come si ottiene la pagina corrente. Ho provato questo

<?php echo '(Pagina '.$page.' di '.$numpages.')'; ?>

e mostra semplicemente pagina 1 di 1 su ogni pagina.

Qualche idea,

Marvellous

0
Tutte le risposte alla domanda 6
3
39

Quando WordPress utilizza la paginazione in questo modo, c'è una variabile di query $paged su cui si basa. Quindi la pagina 1 è $paged=1 e la pagina 15 è $paged=15.

Puoi ottenere il valore di questa variabile con il seguente codice:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Ottenere il numero totale di pagine è un po' più complicato. Prima devi contare tutti i post nel database. Poi filtrare quali post sono pubblicati (rispetto a quelli in bozza, programmati, nel cestino, ecc.). Poi devi dividere questo conteggio per il numero di post che ti aspetti di vedere su ogni pagina:

$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );

Non l'ho ancora testato, ma potresti aver bisogno di recuperare $posts_per_page nello stesso modo in cui hai recuperato $paged (usando get_query_var()).

18 mar 2011 16:01:54
Commenti

Perché non usare $wp_query->max_num_pages?

t31os t31os
18 mar 2011 17:47:01

È un'alternativa valida. Parte di $wp_query che avevo completamente dimenticato fosse lì :-/

EAMann EAMann
18 mar 2011 19:49:32

@EAMann BTW: c'è anche la proprietà found_posts "Il numero totale di post trovati corrispondenti ai parametri della query corrente", wp_count_posts() è un po' ridondante.

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

Potresti farlo con una sola riga di codice, ma potresti voler aggiungere il codice anche in altri punti, quindi una funzione è solitamente più utile.

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 'Pagina ' . $page . ' di ' . $pages;
}

NOTA: Il codice può essere inserito nel tuo file functions.php.

Chiama semplicemente la funzione dove vuoi mostrare il messaggio "Pagina x di y", ad esempio:

<?php current_paged(); ?>

Se hai bisogno che il codice funzioni con una query personalizzata, cioè una che hai creato usando WP_Query, passa semplicemente alla funzione il nome della variabile che contiene la query.

Esempio di query inesistente:

$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() ) 
... ecc..

Ottenere la pagina corrente per la query personalizzata usando la funzione postata prima..

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

Se vuoi dimenticare completamente il supporto per le query personalizzate e cerchi una soluzione in una riga, allora questa dovrebbe funzionare..

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

Spero che sia utile.. :)

18 mar 2011 16:06:00
Commenti

Se fossi in te controllerei se $var è una query: if( is_a( $var, 'WP_Query' ) ) restituirà vero se è un oggetto query.

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

Sì, in effetti è un'idea molto sensata, fatto!.

t31os t31os
16 apr 2011 13:18:49
0

Dalla documentazione di WordPress paginate_links( string|array $args = '' ):

<?php
global $wp_query;
 
$big = 999999999; // serve un numero improbabile
 
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
) );
?>

Questo mostrerà l'elenco dei numeri di pagina e i link per i post Successivo e Precedente. È necessario inserire questo codice nelle pagine dove si desidera visualizzare la numerazione delle pagine.

10 mag 2021 12:35:19
0

Un'opzione che funziona su tutte le mie pagine di archivio è questa:

$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 = 'pagina nr ' . $paged_current_page . ' di ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Nome del Tuo Sito</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Nome del Tuo Sito</title>'; 

}

Prima verifica se c'è più di una pagina in questa wp_query, poi concatena il titolo con la pagina corrente tramite $paged_current_page e il totale delle pagine con $title_page_nrs. Infine lo stampa con echo. Se ci sono più di 1 pagina esegue il primo blocco, altrimenti (else) se non ci sono pagine. Questo codice va inserito in archive.php o nei template per questo tipo. Produce:

<title>Titolo della tassonomia - pagina nr 1 di 4 | Nome del Tuo Sito</title>

oppure

<title>Titolo della tassonomia | Nome del Tuo Sito</title>

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

Come menzionato sopra - un modo più semplice per ottenere il numero massimo di pagine è con:

global $wp_query

$wp_query->max_num_pages

20 feb 2019 01:58:18
Commenti

Anche se questo è corretto, la domanda riguardava l'ottenimento della pagina corrente.

Loosie94 Loosie94
15 apr 2024 11:25:48