El bucle (VII) Variables globales

Las variables globales se utilizan por todo el código de WordPress, haciendo referencia a muchos datos como la conexión MySql, los usuarios, datos de los posts del bucle… Aunque deben de utilizarse solo para recuperar datos en lugar de modificarlos, el cambio de una variable global traerá consigo efectos secundarios no deseados casi con total seguridad, de modo que es mejor utilizar la funciones de la API apropiadas cuando estas estén disponibles.

Hay que tener en cuenta que se deben de utilizar las etiquetas de plantilla siempre que sea posible, pero puede que en determinadas circunstancias no exista una etiqueta de plantilla o que deseemos recoger algun dato sin filtrar, ignorando los plugins existentes y disponiendo del contenido original.

Una vez que el código haya accedido o procesado el valor, se debe de forzar la ejecucion de los filtros de plugin con el siguiente código:

<?php apply_filters ('the_content', $post->post_content);?>

Datos de entradas

Una vez que se invoca el bucle, lo primero que se hace es invocar a the_post(), tras lo cual podemos acceder a todos los datos específicos de la  entrada mostrada.

<?php
global $post;
print_r($post);//nos muestra los datos de la entrada
?>

Esto nos dará el siguiente resultado dependiendo de la entrada:

<pre>Object (
	[ID] => 4
	[post_author] => 1
	[post_date] => 2015-03-24 15:36:32
	[post_date_gmt] => 2015-03-24 15:36:32
	[post_content] => Vamos a probar eso del loop 🙂
	[post_title] => Entrada de prueba
	[post_excerpt] =>
	[post_status] => publish
	[comment_status] => open
	[ping_status] => open
	[post_password] =>
	[post_name] => entrada-de-prueba
	[to_ping] =>
	[pinged] =>
	[post_modified] => 2015-03-24 15:36:32
	[post_modified_gmt] => 2015-03-24 15:36:32
	[post_content_filtered] =>
	[post_parent] => 0
	[guid] => http://localhost/wppracticas/?p=4
	[menu_order] => 0
	[post_type] => post
	[post_mime_type] =>
	[comment_count] => 0
	[filter] => raw
)

Aquí podemos observar como todos los datos que pertenecen a la entrada, los cuales pueden ser invocados para mostrarse, además estos datos estan exentos de los filtros de las consultas, por lo que pueden ser reclamados en algunos momentos:

global $post;
echo $post->post_title;//nos dará el título del post
echo $post->post_date;//no dará la fecha de publicación del post

De este modo no tenemos que pensar demasiado en como resolver por ejemplo cortar cadenas para mostrar x información en entradas que funcionen como plantillas:

global $post;
$cadena = $post->post_content;
$cadena2 = substr($cadena, 0,10);
echo $cadena2;//mostrará los 10 primeros caracteres del contenido

Datos de autor

La variable global $authordata almacena información sobre el autor de la entrada, aunque para ello como estamos viendo siempre es mejor utilizar etiquetas de plantilla.

Datos de usuario

La variable global $current_user almacena información sobre el usuario que esta actualmente conectado en la sesión.

global $current_user;
echo $current_user->display_name;

De hecho con este ejemplo, que nos devuelve el nombre del usuario podemos hacer un pequeño código de benvenida:

global $current_user;
if ($current_user->display_name){
	echo "Bienvenido: " . $current_user->display_name;
}

Para saber otras de sus propiedades solo hace falta hacerle un print_r($current_user), donde aparecen una cantidad enorme de campos. (igual que en $authordata)

Datos de entorno

WordPress dispone de una collección de variables globales creadas para la detección de navegadores, tal y como podemos ver en el siguiente código que puede ejecutar diferentes instrucciones dependiendo del navegador en el que nos encontremos, incluso si es en un mobil.

global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;
if ($is_lynx){
	echo 'estas en Lynx';
}
if ($is_gecko){
	echo 'estas en Firefox';
}
if ($is_IE){
	echo 'estas en IE';
}
if ($is_opera){
	echo 'estas en Opera';
}
if ($is_NS4){
	echo 'estas en Netscape';
}
if ($is_safari){
	echo 'estas en safari';
}
if ($is_chrome){
	echo 'estas en Chrome';
}
if ($is_iphone){
	echo 'estas en  iphone';
}

WordPress mantiene otra variable para detectar si nos encontramos navegando en una tablet o en un mobil , $is_mobile, aunque se puede sustituir por la función wp_is_mobile() que devuelve true si estamos en dispositivo mobil o false si no es así:

if (wp_is_mobile()){
	echo 'estas navegando desde un mobil';
}else{
	echo 'estas en un ordenador';
}

Finalmente wordpress tambien puede saber en que tipo de servidor se enuentra, si es apache o IIS, de una forma muy sencilla:

global $is_apache, $is_IIS;
if ($is_apache){
	echo 'estas en un servidor apache';
}else{
	echo 'estas en un servidor IIS';
}

Hasta aquí todo los relacionado con las variables globales, que son una herramienta muy potente, pero recuerda que siempre es mejor utilizar etiquetas de plantilla cuando tengamos la opción.