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).
global
non è 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.php
chiamando 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.php
e modelli, la cosa migliore da fare è non dichiararli nell'intestazione né nei modelli, ma functions.php
utilizzare 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.php
e 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 static
parola chiave tutto il codice get_my_shared_vars
utilizzato 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.