He definido una variable, llamémosla $ header_var, que se coloca en el archivo header.php. Me gustaría que esta variable se pase a mi archivo de plantilla (en este caso taxonomy.php).
global
no es una forma muy recomendada de hacer el truco, pero funciona si lo usa correctamente: póngalo antes para definir la variable en header.php
y nuevamente antes de recuperar la variable en taxonomy.php
(después de haber llamado get_header () para incluir header.php
)
// in header.php
global $header_var;
$header_var = 'A value';
// in taxonomy.php
get_header();
global $header_var;
echo $header_var; // 'A value'
Me gustaría poder hacer lo mismo al revés, como pasar un $ template_var de mi taxonomy.php a header.php. ¿Es esto posible ya que la variable no se declaró una vez que se cargó el encabezado?
Es PHP, no magia ni máquina del tiempo: las reglas del tiempo se aplican a WordPress como al resto del universo .
Entonces, no, no puedes pasar una variable en el tiempo, pero generalmente, en las plantillas, incluyes header.php
llamando get_header()
así que si configuras una variable antes de llamar a esa función, el truco global también funcionará:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
Sin embargo, si necesita compartir variables header.php
y plantillas, lo mejor que puede hacer es no declararlas en el encabezado ni en las plantillas, sino al functions.php
usar ganchos de acción para controlar cuándo deben declararse las variables.
Un enlace útil es 'template_redirect'
donde tiene acceso a la consulta actual y se activa antes header.php
y se cargan las plantillas.
Un ejemplo aproximado:
// in functions.php
add_action( 'template_redirect', 'get_my_shared_vars' );
function get_my_shared_vars() {
static $shared_vars = NULL;
if ( empty( $shared_vars ) ) {
$shared_vars = array( 'header_var' => 'An header value' );
if ( is_tax() || is_category() || is_tag() ) {
$shared_vars['taxonomy_var'] = 'A taxonomy value';
}
}
return $shared_vars;
}
// in header.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['header_var']; // 'An header value'
// in taxonomy.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['taxonomy_var']; // 'A taxonomy value'
En el código anterior, gracias a la static
palabra clave, todo el código en la get_my_shared_vars
función utilizado para establecer variables se ejecuta solo una vez, por lo que no tiene que preocuparse por problemas de rendimiento si llama a la función más de una vez.