get_query_var vs variabili globali della query?

18 apr 2013, 16:44:46
Visualizzazioni: 19K
Voti: 3

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

0
Tutte le risposte alla domanda 1
2

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.

18 apr 2013 16:55:10
Commenti

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

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

Spiegazione chiara e definita. Esattamente quello che stavo cercando. Grazie.

John John
18 apr 2013 23:00:21