Passaggio di variabili da header.php al template e viceversa
Ho definito una variabile - chiamiamola $header_var
, che si trova nel file header.php. Vorrei che questa variabile fosse passata al mio file template (in questo caso taxonomy.php).
Inoltre, vorrei poter fare lo stesso anche nell'altro verso, come passare una $template_var
dal mio taxonomy.php a header.php.
È possibile farlo considerando che la variabile non era dichiarata quando l'header è stato caricato?
Ho provato a usare global $header_var
ma senza successo.
Qualche suggerimento?
Ho definito una variabile - chiamiamola $header_var, che si trova nel file header.php. Vorrei che questa variabile fosse passata al mio file template (in questo caso taxonomy.php).
L'uso di global
non è il modo più raccomandato per ottenere questo risultato, ma funziona se usato correttamente: inseriscilo prima di definire la variabile in header.php
e di nuovo prima di recuperare la variabile in taxonomy.php
(dopo aver chiamato get_header() per includere header.php
)
// in header.php
global $header_var;
$header_var = 'Un valore';
// in taxonomy.php
get_header();
global $header_var;
echo $header_var; // 'Un valore'
Vorrei poter fare la stessa cosa nell'altro senso, ad esempio passare una $template_var dal mio taxonomy.php a header.php. È possibile dato che la variabile non era dichiarata quando l'header è stato caricato?
È PHP, non magia né macchina del tempo: le regole temporali si applicano a WordPress come al resto dell'universo.
Quindi no, non puoi passare una variabile indietro nel tempo, ma solitamente, nei template, includi header.php
chiamando get_header()
, quindi se imposti una variabile prima di chiamare quella funzione, il trucco del globale funzionerà comunque:
// in header.php
global $template_var;
echo $template_var; // 'Un valore'
// in taxonomy.php
global $template_var;
$template_var = 'Un valore'
get_header();
Tuttavia, se hai bisogno di condividere variabili tra header.php
e i template, la cosa migliore da fare è non dichiararle né nell'header né nei template, ma in functions.php
utilizzando gli action hooks per controllare quando le variabili devono essere dichiarate.
Un hook utile è 'template_redirect'
dove hai accesso alla query corrente e viene attivato prima che header.php
e i template vengano caricati.
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' => 'Un valore per l\'header' );
if ( is_tax() || is_category() || is_tag() ) {
$shared_vars['taxonomy_var'] = 'Un valore per la tassonomia';
}
}
return $shared_vars;
}
// in header.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['header_var']; // 'Un valore per l\'header'
// in taxonomy.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['taxonomy_var']; // 'Un valore per la tassonomia'
Nel codice precedente, grazie alla parola chiave static
tutto il codice nella funzione get_my_shared_vars
utilizzato per impostare le variabili viene eseguito solo una volta, quindi non devi preoccuparti di problemi di prestazioni se chiami la funzione più di una volta.

WordPress 5.5+
A partire dalla versione 5.5.0 get_header
accetta il parametro $args
get_header( 'foo', [ 'header_var' => 'Un valore' ] ); // verrà caricato header-foo.php
/**
* OPPURE
*/
get_header( null, [ 'header_var' => 'Un valore' ] ); // verrà caricato header.php
header.php
<?php echo $args['header_var']; ?>
/**
* OPPURE
*/
<?php extract($args); ?>
<?php echo $header_var; ?>
/**
* Oppure con valori predefiniti
*/
$defaults = array(
'header_var2' => 'bar',
// ...
);
extract(wp_parse_args( $args, $defaults ));
<?= $header_var ?>
<?= $header_var2 ?>

Questo è un approccio molto migliore e più pulito rispetto all'utilizzo di una variabile globale. Ci sono alcuni articoli che parlano dell'uso di variabili globali in PHP. Eccone uno: https://www.oreilly.com/library/view/essential-php-security/059600656X/ch01.html
