J'ai défini une variable - appelons-la $header_var
, qui est placée dans le fichier header.php. Je voudrais que cette variable soit transmise à mon fichier de modèle (dans ce cas taxonomy.php).
Aussi, j'aimerais pouvoir faire la même chose dans l'autre sens, comme passer un $template_var
de 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é?
J'ai essayé d'utiliser $header_var
global mais sans chance.
Aucune suggestion?
J'ai défini une variable - appelons-la $ header_var, qui est placée dans le fichier header.php. Je voudrais que cette variable soit transmise à mon fichier de modèle (dans ce cas taxonomy.php).
global
n’est pas une méthode très recommandée, mais cela fonctionne si vous l’utilisez correctement: mettez-le avant de 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 ( ) à 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'
J'aimerais 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 du PHP, pas de la magie, ni de la machine à voyager dans le temps: les règles de temps s'appliquent à WordPress, comme au au reste de l'univers .
Donc, non, vous ne pouvez pas renvoyer une variable dans le passé, mais généralement, dans les modèles, vous incluez header.php
en appelant get_header()
. Ainsi, si vous définissez une variable before en appelant cette fonction, le global fonctionnera aussi:
// 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 dans 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 dans functions.php
en utilisant action hooks pour contrôler when les variables doivent être déclaré.
Un raccord utile à est 'template_redirect'
où vous avez accès à la requête en cours et qui est déclenché avant header.php
et les modèles sont chargés.
Un exemple approximatif:
// 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 mot clé static
, tout le code de la fonction get_my_shared_vars
utilisée 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 plusieurs fois.