将变量从header.php传递到模板,反之亦然


9

我已经定义了一个变量-称为它$header_var,它位于header.php文件中。我希望将此变量传递到我的模板文件中(在本例中为taxonomy.php)。

我也希望能够以其他方式做同样的事情,例如$template_var从我的taxonomy.php 传递到header.php。

这是有可能的,因为一旦加载标头就没有声明该变量?

我尝试使用全局$header_var但没有运气。

有什么建议么?

Answers:


24

我已经定义了一个变量-我们将其称为$ 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函数中用于设置变量的所有代码仅运行一次,因此,如果多次调用该函数,您不必担心性能问题。


2
如果可以的话,我投1000票。这应该在WP模板文档中
Benn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.