Pasando variables de header.php a template y viceversa


9

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).

También me gustaría poder hacer lo mismo al revés, como pasar un $template_varde mi taxonomy.php a header.php.

¿Es esto posible ya que la variable no se declaró una vez que se cargó el encabezado?

He intentado usar global $header_varpero sin suerte.

¿Alguna sugerencia?

Respuestas:


24

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).

globalno 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.phpllamando 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.phpy plantillas, lo mejor que puede hacer es no declararlas en el encabezado ni en las plantillas, sino al functions.phpusar 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.phpy 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 staticpalabra clave, todo el código en la get_my_shared_varsfunció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.


2
Si pudiera, votaría 1000. Esto debería estar en documentos de plantilla de WP
Benn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.