J'ai défini une variable - appelons-la $ header_var, qui est placée dans le fichier header.php. Je souhaite que cette variable soit transmise à mon fichier de modèle (dans ce cas taxonomy.php).
global
n'est pas un moyen très recommandé de faire l'affaire, mais cela fonctionne si vous l'utilisez correctement: mettez-le avant pour définir la variable dans header.php
et encore avant de récupérer la variable dans taxonomy.php
(après avoir appelé get_header () pour l'inclure 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'
Je voudrais pouvoir faire la même chose dans l'autre sens, comme passer un $ template_var de mon taxonomy.php à header.php. Est-ce même possible puisque la variable n'a pas été déclarée une fois l'en-tête chargé?
C'est PHP, pas magique ni machine à remonter le temps: les règles de temps s'appliquent à WordPress comme au reste de l'univers .
Donc, non, vous ne pouvez pas transmettre une variable dans le temps, mais généralement, dans les modèles, vous incluez header.php
en appelant get_header()
donc si vous définissez une variable avant d' appeler cette fonction, l' astuce globale fonctionnera également:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
Cependant, si vous devez partager des variables header.php
et des modèles, la meilleure chose à faire est de ne pas les déclarer dans l'en-tête ni dans les modèles, mais en functions.php
utilisant des hooks d'action pour contrôler quand les variables doivent être déclarées.
Un point d'ancrage utile est l' 'template_redirect'
endroit où vous avez accès à la requête actuelle et elle est déclenchée avant header.php
et les modèles sont chargés.
Un exemple grossier:
// 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'
Dans le code précédent, grâce au static
mot clé, tout le code dans la get_my_shared_vars
fonction utilisé pour définir les variables ne s'exécute qu'une seule fois, vous n'avez donc pas à vous soucier des problèmes de performances si vous appelez la fonction plus d'une fois.