Ottenere il Numero della Pagina Corrente
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
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()
).

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

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

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.

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>
