Eu defini uma variável - vamos chamá-la de $ header_var, que é colocada no arquivo header.php. Gostaria que essa variável fosse passada para o meu arquivo de modelo (neste caso taxonomy.php).
global
não é uma maneira muito recomendada de fazer o truque, mas funcionará se você o usar corretamente: coloque-o antes para definir a variável header.php
e novamente antes de recuperá-la taxonomy.php
(depois de chamar get_header () para incluir 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'
Eu gostaria de poder fazer o mesmo da outra maneira, como passar um $ template_var do meu taxonomy.php para o header.php. Isso é possível, já que a variável não foi declarada depois que o cabeçalho foi carregado?
É PHP, não é mágica nem é máquina do tempo: as regras de tempo se aplicam ao WordPress, assim como ao resto do universo .
Portanto, não, você não pode passar uma variável de volta no tempo, mas geralmente, nos modelos, você inclui a header.php
chamada. get_header()
Se você definir uma variável antes de chamar essa função, o truque global também funcionará:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
No entanto, se você precisar compartilhar variáveis header.php
e modelos, a melhor coisa a fazer é não declará-las no cabeçalho nem nos modelos, mas functions.php
usando ganchos de ação para controlar quando as variáveis precisam ser declaradas.
Um gancho útil é 'template_redirect'
onde você tem acesso à consulta atual e ela é acionada antes header.php
e os modelos são carregados.
Um exemplo aproximado:
// 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'
No código anterior, graças à static
palavra - chave, todo o código da get_my_shared_vars
função usado para definir variáveis é executado apenas uma vez, para que você não precise se preocupar com problemas de desempenho se chamar a função mais de uma vez.