get_query_var vs variabili globali della query?
Ho definito delle query vars in functions.php usando:
add_filter('init', 'add_query_vars');
function add_query_vars() {
global $wp;
$wp->add_query_var('profession');
}
Fino ad ora, per recuperare la query var nei template delle pagine, ho usato $profession = get_query_var('profession');
. Un esempio simile $paged = get_query_var('paged');
viene mostrato anche per la variabile $paged
nella pagina Codex di get_query_var()
. Tuttavia, oggi ho scoperto che le query variables sono accessibili come variabili globali. Tutto quello che devo fare è dichiarare global $profession;
e posso iniziare a usare il valore della variabile ovunque nel template. Questo mi sembra un modo molto migliore per accedere alle query vars senza l'overhead delle funzioni annidate di get_query_var()
.
C'è una buona ragione per usare get_query_var()
per recuperare le query vars invece di accedervi come variabili globali? Se no, allora perché esiste get_query_var()
?

get_query_var()
è un wrapper per $wp_query->get($var);
. Ma la variabile globale $wp_query
non è sempre identica a quella impostata durante la richiesta. Questo è il problema principale con query_posts()
.
Inoltre, altri plugin possono sovrascrivere queste variabili involontariamente. Ho visto plugin che inserivano $i
nello spazio globale…
E i valori restituiti sono diversi:
$GLOBALS['missing_var']
èNULL
se la variabile non esiste. Il controllo di tipo stretto è:if ( NULL !== $GLOBALS['missing_var'] )
.get_query_var('missing_var');
restituisce una stringa vuota se la variabile non esiste. Il controllo di tipo stretto è:if ( '' !== get_query_var('missing_var')
.
Quando altri programmatori devono lavorare con il tuo codice, possono sempre seguire get_query_var()
per vedere il valore di fallback. Questo non è possibile con le variabili globali.
Inoltre, ci sono piani per ridurre la quantità di variabili globali in WordPress. Usa l'API (la funzione) e sarai probabilmente al sicuro. Accedere alle variabili globali, invece, potrebbe causare problemi.

Aggiungerei anche che, quando si ha la scelta tra lo spazio dei nomi globale e un'altra opzione, è generalmente meglio non utilizzare lo spazio dei nomi globale perché diventa disordinato e non è chiaro da dove proviene la variabile
