get_query_var('paged') returnează întotdeauna gol
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?

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']

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.

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.
