get_query_var vs variabile globale de interogare?

18 apr. 2013, 16:44:46
Vizualizări: 19K
Voturi: 3

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()?

0
Toate răspunsurile la întrebare 1
2

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'] este NULL 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.

18 apr. 2013 16:55:10
Comentarii

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.

Tom J Nowell Tom J Nowell
18 apr. 2013 17:48:09

Explicație clară și bine definită. Exact ceea ce căutam. Mulțumesc.

John John
18 apr. 2013 23:00:21