如果我在header.php中定义了一个变量,如何使其可用于模板?

时间:2016-11-23 作者:dave dave

我在子主题标题中定义了一个变量。php。

我想从其中一个模板中获取此变量的值,该模板是在请求之后呈现的,在请求中,头是。php被调用。

所以,在标题中,我有这样一个:

$foo = "bar"
如果我用标题测试此值。php,它返回“bar”。但是,如果我在调用头之后从调用的模板中测试值,我会得到“null”。

我尝试的第一件事是将“全局$foo”放在$foo的定义之前。但这并没有改变我的结果。

3 个回复
最合适的回答,由SO网友:JHoffmann 整理而成

该模板称为viaget_template_part(), 然后它在一个新的变量范围内。要访问它,您必须使用global 模板文件中的关键字:

global $foo;
echo $foo;
作为header.php probalbly也在函数作用域中调用,定义时必须确保在全局作用域中使用该变量:

global $foo;
$foo = \'bar\';

SO网友:jgraup

不要弄脏了$_GLOBAL 空间如果要禁止类路由并使用具有静态作用域变量的函数,可以将其包含在内。

// getter + setter function 

function prefix_my_var( $value = null ) {
    static $s = null;
    if ( ! is_null( $value ) ) {
        $s = $value;
    }

    return $s;
}

// set + get

$value = prefix_my_var( \'foo\' ); // foo

//  get

$value = prefix_my_var();        // foo
现在,如果您传递一个值,它将设置+获取它。如果你不传递一个值,它只会得到当前值。

echo "<pre>";
print_r( array (
        prefix_my_var(),
        prefix_my_var( \'foo\' ),
        prefix_my_var(),
        prefix_my_var( \'bar\' ),
        prefix_my_var(),
        prefix_my_var( \'baz\' ),
    ) );

Array
(
    [0] => 
    [1] => foo
    [2] => foo
    [3] => bar
    [4] => bar
    [5] => baz
)

SO网友:ricotheque

如果要跨不同的模板文件传递大量值,我建议使用静态类来存储数组。

// In your functions.php
class Var
{
    public static $foo;
    public static function set_var($value;)
    {
        self::$foo = $value;
    }

}

// In your header.php
\\Var::set_var(array(
    \'var1\' => \'value1\',
    \'var2\' => \'value2\',
));
现在,您可以在任何其他地方静态调用该类来访问数据。

// Displays \'value1\'
echo \\Var::$foo[\'var1\'];

// Displays \'value2\'
echo \\Var::$foo[\'var2\'];
传递几个变量似乎有些过分,但如果需要传递更多信息,至少可以选择扩展数组。