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

时间:2014-06-11 作者:user54079

我定义了一个变量,我们称之为$header_var, 放置在标题中。php文件。我希望将此变量传递到我的模板文件(在本例中为taxonomy.php)。

另外,我也希望能够以另一种方式做同样的事情,比如通过$template_var 根据我的分类法。php到标题。php。

这是可能的,因为在加载头之后没有声明变量吗?

我试过使用global$header_var 但是没有运气。

有什么建议吗?

2 个回复
SO网友:gmazzap

我定义了一个变量,我们称之为$header\\u var,它放在标题中。php文件。我希望将此变量传递到我的模板文件(在本例中为taxonomy.php)。

global 这不是一种非常推荐的方法,但如果使用得当,它会起作用:将其放在前面,以便在中定义变量header.php and again 在中检索变量之前taxonomy.php (调用get\\u 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\\u var。php到标题。php。这是可能的,因为在加载头之后没有声明变量吗?

这是PHP,不是魔法,也不是时间机器:时间规则适用于WordPressthe rest of the universe.

所以,不,您不能将变量传递回时间,但通常在模板中,您包括header.php 通过调用get_header() 所以如果你设置一个变量before 调用该函数,全局技巧也会起作用:

// 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 使用action hooks 控制何时必须声明变量。

一个有用的钩子是\'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 用于设置变量的函数只运行一次,因此如果多次调用该函数,则无需担心性能问题。

SO网友:Denis Fedorov

Wordpress 5.5+

自5.5.0起get_header$args 参数

get_header changelog

get_header( \'foo\', [ \'header_var\' => \'A value\' ] ); // header-foo.php will be loaded

/**
 * OR
 */

get_header( null, [ \'header_var\' => \'A value\' ] ); // header.php will be loaded

header.php

<?php echo $args[\'header_var\']; ?>

/**
 * OR
 */

<?php extract($args); ?>
<?php echo $header_var; ?>

/**
 * Or with defaults
 */

$defaults = array( 
    \'header_var2\' => \'bar\',
    // ...
);
extract(wp_parse_args( $args, $defaults ));

<?= $header_var ?>
<?= $header_var2 ?>

结束

相关推荐

Using $themename Variables

将您的主题名(themename)和缩写名(shortname)设置为变量以用于主题的各种函数,这是一个坏主意吗?示例:$themename = mytheme; $shortname = mth; /** * Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link. */ function toolbox_page_menu_args($args) { /