web-dev-qa-db-fra.com

get_query_var vs variables de requête globales?

J'ai des vars de requête définis dans functions.php en utilisant:

add_filter('init', 'add_query_vars');

function add_query_vars() {
    global $wp;
    $wp->add_query_var('profession');
}

Jusqu'à présent, pour récupérer la requête var dans les modèles de page, j'utilisais $profession = get_query_var('profession');. Un exemple similaire, $paged = get_query_var('paged');, est également présenté pour la variable $paged dans page Codex pour get_query_var(). Cependant, j'ai appris aujourd'hui que les variables de la requête sont accessibles en tant que variables globales. Tout ce que je dois faire est de déclarer global $profession; et je peux commencer à utiliser la valeur de la variable n'importe où dans le modèle. Cela me semble être un moyen bien meilleur d’accéder aux vars de requête sans les frais généraux des fonctions imbriquées de get_query_var().

Existe-t-il une bonne raison d'utiliser get_query_var() pour extraire les vars de requête au lieu de les accéder en tant que variables globales? Si non, alors pourquoi get_query_var() existe-t-il?

3
John

get_query_var() est un wrapper pour $wp_query->get($var);. Mais le $wp_query global n'est pas toujours identique à celui défini lors de la requête. C’est le problème principal avec query_posts() .
Et d’autres plugins peuvent écraser ces variables involontairement. J'ai vu des plugins mettre $i dans le namespace global…

Et les valeurs de retour sont différentes:

  • $GLOBALS['missing_var'] est NULL s'il n'y a pas de telle variable. La vérification de type stricte est la suivante: if ( NULL !== $GLOBALS['missing_var'] ).
  • get_query_var('missing_var'); est une chaîne vide si cette variable n’existe pas. La vérification de type stricte est la suivante: if ( '' !== get_query_var('missing_var').

Lorsque d'autres programmeurs doivent travailler avec votre code, ils peuvent toujours suivre get_query_var() pour voir la valeur de repli. Cela n’est pas possible avec les variables globales.

Et puis, il est prévu de réduire le nombre de variables globales dans WordPress. Utilisez l'API (la fonction) et vous êtes probablement en sécurité. L’accès aux variables globales, par contre, peut poser problème.

4
fuxia