Passando variáveis ​​de header.php para template e vice-verca

9

Eu defini uma variável - vamos chamá-la $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).

Também gostaria de poder fazer o mesmo ao contrário, como passar um $template_vardo 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?

Eu tentei usar global, $header_varmas sem sorte.

Alguma sugestão?

user54079
fonte

Respostas:

24

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).

globalnã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.phpchamada. 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.phpe modelos, a melhor coisa a fazer é não declará-las no cabeçalho nem nos modelos, mas functions.phpusando 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.phpe 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 à staticpalavra - chave, todo o código da get_my_shared_varsfunçã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.

gmazzap
fonte
2
Se eu pudesse eu votaria 1000. Isso deve estar em docs modelo WP
Benn