Uso de variables globales dentro del plugin
Estoy creando mi primer plugin y me encontré con la necesidad de llamar a las mismas variables de opciones en varias partes de la misma página, por lo que busqué una solución y me topé con variables globales que parecen funcionar para mí. Sin embargo, después de leer algunos artículos, la gente parece estar en contra de usar variables globales y además, no estoy completamente seguro si las estoy usando de la manera correcta.
Esto es lo que tengo:
/************************
* Variables
************************/
global $bClass, $cClass, $dClass, $cExpiry;
$bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
Luego, como uso una única opción para guardar variables relevantes en un array, mostraría el valor así:
jQuery
expires: <?php global $cExpiry; echo $cExpiry['cExpiry']; ?>,
y luego también lo usaría en otras funciones dentro de la misma página.
Entonces, funciona para mí, pero aún me pregunto si lo estoy haciendo bien.
actualización Gracias por la explicación chicos, terminé usando variables locales y también encontré un error en mi código:
Como tengo todas mis variables guardadas en una única opción, solo usé una variable local:
$options = get_option('myoption');
Luego podría acceder al array colocando la variable dentro de corchetes
<?php echo $options['var1']; ?>
Mientras que antes estaba haciendo $bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
lo cual es malo.

Hay formas más fáciles que esta. Como ya mencionó @Wyck, usar variables globales es una mala idea, aquí hay una breve explicación y cómo hacerlo:
Por qué las variables globales son malas:
1) Todos pueden acceder a ellas en cualquier lugar. Al principio suena bien, pero también puedes hacer lo siguiente:
// Tu código: valor por defecto
global $foo;
$foo = 'bar';
// Configuración del usuario:
global $foo;
$foo = get_option( 'baz' );
// Más adelante en tu código
if ( 'bar' === $foo )
// hacer algo importante
// Ahora yo, el usuario final, hago esto en una plantilla
// o Ernie, el desarrollador novato, hace esto en su plugin de terceros:
$GLOBALS['foo'] = 42;
y de repente nada funciona como se esperaba. Es tan simple como esto: Las variables globales pueden ser interceptadas. No están libres de conflictos y nadie puede jamás estar seguro de lo que contienen.
2) Ahora que sabes que pueden cambiar sobre la marcha, sabes que son impredecibles. Y si quieres rastrearlas con tu IDE (por ejemplo PHPStorm, Eclipse/Aptana, etc.) entonces nunca descubrirás cuál es su origen o dónde exactamente se modifican... a menos que te sientes por un buen rato y uses cosas como puntos de interrupción y algo como XDebug y sepas manejarte.
3) ¿Realmente necesito escribir más? Supongo que no.
Conclusión: Como la mayoría de las opciones se cargan automáticamente, ya están presentes en cada página/solicitud y no necesitan envolverse en una variable global. Simplemente llama a get_option()
cuando lo necesites.
Cómo pasar datos de PHP a JS
Es tan simple como esto: wp_localize_script()
Ejemplo: (se puede usar con los hooks login_enqueue_scripts
y admin_enqueue_scripts
también)
add_action( 'wp_enqueue_scripts', 'wpse115840_scripts' );
function wpse115840_scripts()
{
wp_enqueue_script( 'wpse_handle', etc... );
// Aquí viene la magia:
wp_localize_script( 'wpse_handle', 'wspeObject', array(
'foo' => 'bar',
'bar' => get_option( 'baz' )
) );
}
Ahora puedes acceder a todos los datos del array de wp_localize_script()
(el tercer argumento) en tu archivo JavaScript que acabas de registrar/encolar simplemente llamando a wpseObject
. El siguiente ejemplo ahora te daría el valor bar
:
console.log( wpseObject.foo );
y tu wpseObject.bar
contendría el valor de tu configuración baz
.
