get_query_var('paged') restituisce sempre vuoto

18 dic 2012, 14:21:56
Visualizzazioni: 13.6K
Voti: 7

Sto pubblicando questo dopo aver sbattuto contro un muro nel cercare possibili soluzioni.

Ho un sito con diversi custom post type e relative tassonomie personalizzate. Per semplificare, sto usando un template unificato taxonomy.php.

All'interno di questo template ci sono tre loop. Vorrei che tutti e tre venissero eseguiti nella prima pagina, mentre dalle pagine successive solo il terzo loop. Capisco come farlo funzionare con is_paged() ma c'è un problema più grande che non riesco a risolvere.

Nei miei $args ho incluso $paged da

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

Ma $paged restituisce sempre 1, indipendentemente dalla pagina in cui mi trovo. Se faccio direttamente

    get_query_var('paged')

Non viene restituito nulla, sia che io sia nella prima, seconda, terza o qualsiasi altra pagina.

Ho letto che è necessario resettare ogni loop per far funzionare questo, e questa è una pratica che ho sempre seguito.

Non includerò l'intera pagina qui, dato che si tratta di una tassonomia piuttosto lunga e complessa. Mostrerò invece la struttura base dei due loop.

NOTA: Non posso usare pre_get_posts per questa pagina perché influisce su tutti i loop. Ognuno di questi loop ha requisiti diversi per posts_per_page e altri aspetti che devono rimanere separati.

In cima al template ho

    //questo previene duplicazioni
        $do_not_duplicate = array();

        global $wp_query;
        $term = $wp_query->queried_object;

E configuro il mio loop dopo gli args con

while ($new_query->have_posts()) : $new_query->the_post();

Il terzo loop che voglio paginato ha questo codice nelle vicinanze

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;                                 
                $args=array(
                    'posts_per_page' => $total_posts,
                    'post__not_in' => array_merge($do_not_duplicate, $unwanted_post_ids ),
                    'paged' => $paged,
                    'tax_query' => array(
                            array(
                                'taxonomy'  => $term->taxonomy,
                                'field'     => 'slug',
                                'terms'     => $term->slug,
                                )
                            )
                    );

                // Rieseguo la query con i nuovi argomenti
                query_posts( $args );

Ho sempre usato wp_query invece di query_posts, ma nei miei ultimi tentativi ho provato così. Preferirei tornare alla versione precedente.

Qualche idea?

3
Commenti

puoi pubblicare il tuo codice per intero? È un po' difficile da seguire con frammenti in prosa, vedere l'intero codice renderebbe molto più semplice capirlo

Tom J Nowell Tom J Nowell
18 dic 2012 14:43:08

tieni anche presente che query_posts utilizzerà comunque WP_Query a livello più basso, quindi non ha senso usarlo come strumento di query generale

Tom J Nowell Tom J Nowell
18 dic 2012 14:43:50

Prova a usare questo: $paged = (get_query_var('page')) ? get_query_var('page') : 1; Non sono sicuro del motivo ma una volta ha funzionato per me.

Rohit Pande Rohit Pande
15 giu 2013 09:28:10
Tutte le risposte alla domanda 5
1

Prova a utilizzare il seguente codice:

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

Invece di utilizzare:

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

Ho avuto lo stesso problema e funziona per me.

25 feb 2022 20:52:05
Commenti

'page' viene utilizzato solo per una pagina statica frontale. Altrimenti è necessario 'paged'.

JohnG JohnG
1 ago 2022 14:15:23
0

Hai il parametro "paged" nell'URL della pagina che stai cercando di utilizzare con get_query_var? Per quanto ne so, get_query_var("paged") restituisce esplicitamente il valore del parametro nell'URL, quindi devi avere un URL simile a questo per farlo funzionare:

/?paged=7

In alternativa, potresti leggere il parametro dall'URL utilizzando direttamente PHP:

$_GET['paged']
18 dic 2012 15:52:18
0

Dovresti essere in grado di ottenere queste informazioni direttamente dalla variabile principale $wp_query, potresti fare un print_r() e controllare i vari argomenti di cui hai bisogno, come paged, posts_per_page, ecc. ecc. Quali informazioni riesci a vedere nel tuo template quando fai questo?

23 ago 2013 18:27:56
0

Ho avuto lo stesso problema, anche se specificamente riguardava la paginazione con AJAX. get_query_var('paged') restituiva una stringa vuota, quindi $paged veniva sempre impostato su "1", e - nonostante le pagine cambiavano - i link di paginazione mostravano sempre "1" come pagina corrente.

Per risolvere il mio problema, ho semplicemente preso il valore della pagina passato al mio file di funzioni ($_POST['page']) tramite AJAX, l'ho chiamato $pagination_no, poi ho modificato la formula di $paged in:

$paged = ($pagination_no) ? $pagnination_no : 1;

Questo ha risolto il problema.

1 ago 2022 16:03:00
0

Usa page, non paged, nella pagina frontale statica

✅ La soluzione:

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

⭐️ Una sintassi migliore (vedi fonte):

$paged = get_query_var('page', 1);

All'interno del loop puoi usare direttamente il valore globale $page (vedi documentazione):

global $page;

Se sei su una pagina frontale statica devi usare la variabile di query page invece di paged (vedi documentazione).

La variabile globale $page restituisce sempre un intero.

Un approccio migliore:

$paged = 1;
if ( get_query_var('paged') ) $paged = get_query_var('paged');
if ( get_query_var('page') ) $paged = get_query_var('page');

Questo fornirà un fallback elegante indipendentemente da dove usi il codice.

Ecco un vecchio riferimento che cerca di risolvere il problema.

6 ott 2022 11:22:11