get_query_var vs variables de consulta globales en WordPress
Tengo variables de consulta definidas en functions.php usando:
add_filter('init', 'add_query_vars');
function add_query_vars() {
global $wp;
$wp->add_query_var('profession');
}
Hasta ahora, para recuperar la variable de consulta en las plantillas de página, he estado usando $profession = get_query_var('profession');
. Un ejemplo similar $paged = get_query_var('paged');
también se muestra para la variable $paged
en la página del Codex para get_query_var()
. Sin embargo, hoy aprendí que las variables de consulta son accesibles como variables globales. Todo lo que tengo que hacer es declarar global $profession;
y puedo empezar a usar el valor de la variable en cualquier parte de la plantilla. Esto me parece una forma mucho mejor de acceder a las variables de consulta sin la sobrecarga de funciones anidadas de get_query_var()
.
¿Hay alguna buena razón para usar get_query_var()
para obtener las variables de consulta en lugar de acceder a ellas como variables globales? Si no es así, entonces ¿por qué existe get_query_var()
?

get_query_var()
es un envoltorio para $wp_query->get($var);
. Pero el global $wp_query
no siempre es idéntico al configurado durante la solicitud. Ese es el problema principal con query_posts()
.
Y otros plugins también pueden sobrescribir estas variables sin intención. He visto plugins poniendo $i
en el espacio global de nombres...
Y los valores de retorno son diferentes:
$GLOBALS['missing_var']
esNULL
si no existe dicha variable. La comprobación estricta de tipos es:if ( NULL !== $GLOBALS['missing_var'] )
.get_query_var('missing_var');
es una cadena vacía si esa variable no existe. La comprobación estricta de tipos es:if ( '' !== get_query_var('missing_var')
.
Cuando otros programadores tienen que trabajar con tu código, siempre pueden seguir get_query_var()
para ver el valor de respaldo. Eso no es posible con variables globales.
Y luego están los planes para reducir la cantidad de variables globales en WordPress. Usa la API (la función) y probablemente estarás seguro. Acceder a variables globales, por otro lado, podría causar problemas.

También agregaría que cuando se tiene la opción entre el espacio de nombres global y otra cosa, generalmente es mejor no usar el espacio de nombres global ya que se vuelve confuso y no queda claro de dónde proviene la variable
