get_query_var vs variabile globale de interogare?
Am definit variabile de interogare în functions.php folosind:
add_filter('init', 'add_query_vars');
function add_query_vars() {
global $wp;
$wp->add_query_var('profession');
}
Până acum, pentru a prelua variabila de interogare în șabloanele de pagină, am folosit $profession = get_query_var('profession');
. Un exemplu similar $paged = get_query_var('paged');
este prezentat și pentru variabila $paged
pe pagina Codex pentru get_query_var()
. Totuși, astăzi am învățat că variabilele de interogare sunt accesibile ca variabile globale. Tot ce trebuie să fac este să declar global $profession;
și pot folosi valoarea variabilei oriunde în șablon. Aceasta mi se pare o metodă mult mai bună de a accesa variabilele de interogare fără suprasolicitarea funcțiilor imbricate ale get_query_var()
.
Există vreun motiv bun pentru a folosi get_query_var()
pentru a prelua variabilele de interogare în loc să le accesez ca variabile globale? Dacă nu, atunci de ce există get_query_var()
?

get_query_var()
este un wrapper pentru $wp_query->get($var);
. Dar variabila globală $wp_query
nu este întotdeauna identică cu cea configurată în timpul cererii. Aceasta este problema principală cu query_posts()
.
Și alte plugin-uri pot suprascrie aceste variabile din greșeală. Am văzut plugin-uri care adăugau $i
în namespace-ul global...
Și valorile returnate sunt diferite:
$GLOBALS['missing_var']
esteNULL
dacă nu există o astfel de variabilă. Verificarea strictă de tip este:if ( NULL !== $GLOBALS['missing_var'] )
.get_query_var('missing_var');
returnează un șir gol dacă variabila nu există. Verificarea strictă de tip este:if ( '' !== get_query_var('missing_var')
.
Când alți programatori lucrează cu codul tău, ei pot urmări întotdeauna get_query_var()
pentru a vedea valoarea implicită. Acest lucru nu este posibil cu variabilele globale.
Și apoi există planuri de a reduce numărul de variabile globale în WordPress. Folosește API-ul (funcția) și vei fi probabil în siguranță. Accesarea variabilelor globale, pe de altă parte, ar putea duce la probleme.

Aș mai adăuga că atunci când ai de ales între spațiul de nume global și altceva, de obicei este mai bine să nu folosești spațiul de nume global, deoarece devine dezordonat și nu este clar de unde provine variabila.
