Passando le variabili da header.php al template e viceversa


9

Ho definito una variabile - chiamiamola $header_var, che si trova nel file header.php. Vorrei che questa variabile venisse passata sul mio file modello (in questo caso taxonomy.php).

Inoltre vorrei essere in grado di fare lo stesso il contrario, come passare un $template_vardal mio taxonomy.php a header.php.

Ciò è possibile anche dal momento che la variabile non è stata dichiarata dopo il caricamento dell'intestazione?

Ho provato a utilizzare globale $header_varma senza fortuna.

Eventuali suggerimenti?

Risposte:


24

Ho definito una variabile - chiamiamola $ header_var, che si trova nel file header.php. Vorrei che questa variabile venisse passata sul mio file modello (in questo caso taxonomy.php).

globalnon è un modo molto consigliato di fare il trucco, ma funziona se lo usi correttamente: mettilo prima per definire la variabile in header.php e ancora prima di recuperare la variabile in taxonomy.php(dopo aver chiamato get_header () da includere 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'

Vorrei poter fare lo stesso il contrario, come passare $ template_var dal mio taxonomy.php a header.php. Ciò è possibile anche dal momento che la variabile non è stata dichiarata una volta caricata l'intestazione?

È PHP, non magia né macchina del tempo: le regole del tempo si applicano a WordPress come al resto dell'universo .

Quindi, no, non puoi passare indietro una variabile nel tempo, ma di solito, nei template, includi header.phpchiamando get_header()quindi se imposti una variabile prima di chiamare quella funzione, anche il trucco globale funzionerà:

// in header.php
global $template_var;
echo $template_var; // 'A value'

// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();

Tuttavia, se è necessario condividere variabili header.phpe modelli, la cosa migliore da fare è non dichiararli nell'intestazione né nei modelli, ma functions.phputilizzare gli hook di azione per controllare quando devono essere dichiarate le variabili.

Un hook utile a è 'template_redirect'dove si ha accesso alla query corrente e viene attivato prima header.phpe vengono caricati i modelli.

Un esempio approssimativo:

// 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'

Nel codice precedente, grazie alla staticparola chiave tutto il codice get_my_shared_varsutilizzato per impostare le variabili viene eseguito una sola volta, quindi non devi preoccuparti di problemi di prestazioni se chiami la funzione più di una volta.


2
Se potessi, voterei 1000. Questo dovrebbe essere nei documenti modello WP
Benn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.