get_query_var('paged') returnează întotdeauna gol

18 dec. 2012, 14:21:56
Vizualizări: 13.6K
Voturi: 7

Postez această întrebare după ce am încercat multiple soluții fără succes.

Am un site cu mai multe tipuri de postări personalizate și taxonomii asociate. Pentru a simplifica lucrurile, folosesc un șablon unificat taxonomy.php.

În acest șablon există trei loop-uri. Doresc ca toate trei să ruleze pe prima pagină, iar apoi doar al treilea loop să continue. Înțeleg cum să implementez acest lucru cu is_paged(), dar există o problemă mai mare pe care nu o pot rezolva.

În argumentele $args am inclus $paged din:

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

Dar $paged returnează întotdeauna 1, indiferent de pagina pe care mă aflu. Dacă folosesc direct:

    get_query_var('paged')

Nu returnează nimic, indiferent dacă sunt pe prima, a doua, a treia pagină etc.

Am citit că trebuie să resetezi fiecare loop pentru ca această funcționalitate să funcționeze, iar aceasta este o practică pe care am urmat-o întotdeauna.

Nu voi include întreaga pagină aici, deoarece această taxonomie este destul de complexă. În schimb, voi arăta structura de bază a celor două loop-uri.

NOTĂ: Nu pot folosi pre_get_posts pentru această pagină deoarece afectează toate loop-urile. Fiecare dintre aceste loop-uri are cerințe separate pentru posts_per_page și alte aspecte care trebuie păstrate separate.

În partea de sus a șablonului am:

    //această variabilă evită duplicarea
        $do_not_duplicate = array();

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

Și configurez loop-ul după argumente cu:

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

Al treilea loop pentru care doresc paginare are acest cod în apropiere:

    $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,
                                )
                            )
                    );

                // Rulează din nou interogarea cu noile argumente
                query_posts( $args );

Am folosit în mod normal wp_query în loc de query_posts, dar în ultimele încercări am folosit acesta din urmă. Aș prefera să revin la wp_query.

Ai vreo idee?

3
Comentarii

poți să postezi codul tău în întregime? E puțin greu de urmărit în proză cu fragmente, văzând totul ar fi mult mai ușor de înțeles

Tom J Nowell Tom J Nowell
18 dec. 2012 14:43:08

de asemenea, ține minte că query_posts va folosi WP_Query la nivelul cel mai de bază oricum, deci nu are rost să-l folosești ca un instrument general de interogare

Tom J Nowell Tom J Nowell
18 dec. 2012 14:43:50

Încearcă să folosești asta: $paged = (get_query_var('page')) ? get_query_var('page') : 1; Nu sunt sigur de motivul din spatele acestui lucru, dar a funcționat pentru mine odată.

Rohit Pande Rohit Pande
15 iun. 2013 09:28:10
Toate răspunsurile la întrebare 5
1

Încearcă să utilizezi următoarele:

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

În loc să folosești:

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

Am avut aceeași problemă și funcționează pentru mine.

25 feb. 2022 20:52:05
Comentarii

'page' este folosit doar pentru o pagină frontală statică. În caz contrar, este necesar 'paged'.

JohnG JohnG
1 aug. 2022 14:15:23
0

Aveți parametrul "paged" în URL-ul paginii (lor) pe care încercați să o utilizați cu get_query_var? Din câte știu, get_query_var("paged") returnează explicit valoarea parametrului din URL, așa că aveți nevoie de un URL de genul acesta pentru a funcționa:

/?paged=7

Alternativ, puteți citi parametrul URL folosind direct PHP:

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

Ar trebui să poți obține acest lucru direct din variabila principală $wp_query, ai putea face un print_r() și să verifici diferitele argumente de care ai nevoie, cum ar fi paged, posts_per_page etc. Ce informații poți vedea în template-ul tău când faci asta?

23 aug. 2013 18:27:56
0

Am avut aceeași problemă, deși mai exact în cazul paginării folosind AJAX. get_query_var('paged') returna un șir gol, așa că $paged era întotdeauna setat la "1", și - deși paginile se schimbau - link-urile de paginare afișau întotdeauna "1" ca pagină curentă.

Pentru a rezolva problema mea, am preluat valoarea paginii transmisă către fișierul meu de funcții ($_POST['page']) prin AJAX, am numit-o $pagination_no, apoi am schimbat formula pentru $paged în:

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

Asta a funcționat.

1 aug. 2022 16:03:00
0

Folosește page, nu paged, pe pagina frontală statică

✅ Soluția:

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

⭐️ O sintaxă mai bună (vezi sursa):

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

În interiorul buclei poți folosi direct valoarea globală $page (vezi documentația):

global $page;

Dacă ești pe o pagină frontală statică, trebuie să folosești variabila de interogare page în loc de paged (vezi documentația).

Variabila globală $page întotdeauna returnează un număr întreg.

O abordare mai bună:

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

Aceasta va funcționa corect indiferent unde folosești codul.

Aici este o referință veche care încearcă să rezolve problema.

6 oct. 2022 11:22:11