Qual è la differenza tra $paged e $page?
Sto creando la paginazione per il mio sito. Spero che qualcuno possa spiegarmi a cosa serve il codice qui sotto? Grazie in anticipo.
<?php
// Controlla se esiste la variabile di query 'paged' (usata per pagine archivio/categorie)
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
}
// Altrimenti controlla la variabile 'page' (usata per pagine statiche)
elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
}
// Se nessuna delle due è presente, imposta la pagina corrente a 1
else {
$paged = 1;
}
// Esegue la query con il numero di pagina e posts per pagina
query_posts('paged='.$paged.'&posts_per_page=');
?>

Spero che tu abbia capito cosa siano le variabili di query. Se non è così, ecco una breve spiegazione. La query principale utilizza WP_Query
per configurarsi. Nella query principale, WP_Query
utilizza variabili di query pubbliche per costruire la query principale in base alla pagina richiesta, e paged
e page
sono due di queste. Per vedere tutte le variabili di query pubbliche, incolla questo nel tuo header e controlla su tutti i template come vengono impostate in base alla pagina richiesta:
var_dump($wp_query->query_vars);
La funzione get_query_var()
viene utilizzata per ottenere i valori da queste variabili di query pubbliche, e in questo caso si tratta di page
e paged
.
Per rispondere alla tua domanda, questi due parametri e i loro valori vengono utilizzati da WP_Query
per calcolare l'impaginazione e, soprattutto, l'offset dei post in base ai numeri di pagina. È questo parametro che garantisce che i tuoi post vengano visualizzati correttamente quando si sfogliano le pagine.
paged
-> Utilizzato nella homepage, nella pagina del blog, nelle pagine di archivio e nelle pagine per calcolare l'impaginazione. La prima pagina è0
e da lì il numero corrisponde al numero di pagina.page
-> Utilizzato in una front page statica e nelle pagine singole per l'impaginazione. L'impaginazione su queste pagine funziona allo stesso modo, una front page statica viene trattata come una pagina singola nell'impaginazione. Per impaginazione su pagine singole, intendo che i singoli post possono essere suddivisi in più pagine.
Quello che fa il tuo codice, fondamentalmente, è controllare se il parametro paged
è impostato, se non lo è, controlla se il parametro page
è impostato, e se non è impostato, imposta la pagina a 1
. Questo controllo fallirà sempre sulla pagina 1, quindi $paged
tornerà sempre a 1
. Su qualsiasi altra pagina diversa dalla prima, paged
o page
restituiranno true e imposteranno $paged
al numero di pagina corretto.
Nota finale: Non usare mai query_posts
a meno che tu non voglia rompere qualcosa sulla tua pagina, e credimi, non vuoi farlo. Usa sempre WP_Query
per query personalizzate con impaginazione. Per una spiegazione completa su questo, consulta questo post che ho scritto tempo fa.

Grazie @pieter-goosen È davvero una bella spiegazione. Il parametro paged
viene utilizzato per ottenere la pagina corrente che si sta visualizzando?

Sì, puoi usare echo get_query_var( 'paged' );
per ottenere il numero della pagina corrente che stai visualizzando

Ottima spiegazione! Il parametro page
tiene conto della keyword <!--nextpage-->
, che divide un singolo post in più pagine: https://en.support.wordpress.com/nextpage/view-all/

Attenzione che una homepage può essere impostata come pagina statica frontale e quindi viene utilizzata page invece di paged.
@PieterGoosen Non sono d'accordo con la tua nota finale. Se restituisci post tramite uno shortcode, query_posts potrebbe essere utilizzato. Indipendentemente dal fatto che tu lo faccia o meno, devi chiamare wp_reset_query dopo aver recuperato i dati, altrimenti incorrerai in problemi. Io lo faccio effettivamente e non ho avuto alcun problema.
