Answers:
我已经定义了一个变量-我们将其称为$ header_var,它位于header.php文件中。我希望将此变量传递到我的模板文件中(在本例中为taxonomy.php)。
global
并不是推荐的方法,但是如果正确使用它可以使用:在定义变量之前先放置变量,header.php
然后在获取变量之前再次调用taxonomy.php
(在调用get_header()包括之后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'
我希望能够以其他方式做同样的事情,例如将$ template_var从我的taxonomy.php传递到header.php。这是有可能的,因为一旦加载标头就没有声明该变量?
它是PHP,不是魔术也不是时间机器:时间规则适用于WordPress,就像宇宙的其余部分一样。
因此,不,您无法及时传递变量,但是通常在模板中包含header.php
调用,get_header()
因此,如果在调用该函数之前设置了变量,则全局技巧也将起作用:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
但是,如果您需要在header.php
和模板中共享变量,则最好不要在标头或模板中声明变量,而应functions.php
使用动作挂钩来控制何时必须声明变量。
一个有用的挂钩是'template_redirect'
您可以访问当前查询的位置,header.php
并且在加载模板之前将其触发。
一个粗略的例子:
// 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'
在先前的代码中,由于使用了static
关键字关键字,get_my_shared_vars
函数中用于设置变量的所有代码仅运行一次,因此,如果多次调用该函数,您不必担心性能问题。