Hoy les traigo un artículo dedicado a wordpress, donde tenemos muchísimos recursos de desarrollo, pero a veces no los conocemos y nos vemos un poco limitados.
Una de estas situaciones se da cuando queremos conocer información sobre la página que se está mostrando, pero por fuera del ‘loop’. Por ejemplo, si queremos mostrar el nombre del artículo o la página pero en el ‘sidebar’. Para lograr esto, tenemos que extraer la información de la consulta con la cual se generó la página mostrada.
WordPress nos da una función bastante útil para extraer las variables o los parámetros con los que se generó la consulta. Está función es get_query_var().
get_query_var
Acá podemos encontrar la documentación de la función: http://codex.wordpress.org/Function_Reference/get_query_var.
Volviendo al ejemplo, para saber en que página o post nos encontramos, llamaríamos get_query_var(‘p’) para obtener el ID o get_query_var(‘name’) para obtener el slug.
Sin embargo, todo depende de como se haya generado la consulta: Si llamamos a la página de está forma http://miwebsite.com/?page_id=5, entonces podemos obtener el ID y no el slug. Pero si usamos http://miwebsite.com/page-slug, ya no podemos obtener el ID usando get_query_var; solo podemos obtener el slug, pues esta sería la variable utilizada en la consulta.
$wp_query
Una mejor forma de obtener está información por fuera del ‘loop’, se logra a través de la variable global $wp_query. Esta variable está disponible en todo momento, es un objeto de la clase WP_Query, y contiene toda la información de la consulta (no solo las variables que se usaron para generarla.)
Así que para obtener el ID del post o la página que se muestra, solo tendríamos que hacer esto:
global $wp_query; $thePostID = $wp_query->post->ID;
o para obtener el slug:
global $wp_query; $postSlug = $wp_query->post->post_name;
Mucho más fácil y confiable que get_query_var() !!!
Muchísimas gracias, me ha sido de gran ayuda este post. Imaginaba que habría alguna forma fácil de tener esa información pero no sabía cómo.
Hola Luis,
Que bueno que te haya servido!