WordPress - 在get_header中包含变量不起作用

时间:2014-07-16 12:37:40

标签: php wordpress variables global-variables

出于某种原因,每当我尝试将变量放在get_header的WordPress自定义page.php中时,它都无法识别该值并重置为默认值。

这是我的代码:

$header_choice = of_get_option( 'headerstyle', 'default' );
get_header( $header_choice );

of_get_option是来自Options Framework

的函数

这是因为我使用的是多站点,如果高级用户可以自行更改每个站点的标头而不必深入了解代码或不得不向我们询问开发人员,那将会很棒。

如何在get_header中使用变量,以便我可以动态分配值?

1 个答案:

答案 0 :(得分:5)

您遇到了variable scope问题。 WordPress通过它自己的函数get_header()包含标题,并且您的模板变量不可用。您可能会发现其他人建议您使用include('header.php'),但也希望这样做。 (get_header()触发其他WordPress特定的操作,保留它很重要。)

你有几个选择,其中一个是我的偏好。

首先,您可以使用global关键字将变量提升到全局范围,如下所示:

global $header_choice = of_get_option( 'headerstyle', 'default' );
get_header();

然后, header.php内,您可以使用全局关键字再次访问它,如下所示:

// from inside header.php
global $header_choice;
if ($header_choice == 'some_option') {
    // do some work
}

但是这会污染全局范围(并且它可能会变得杂乱无章,尤其是如果你开始在其他页面和其他东西中使用全局变量)。因此,您还可以使用$GLOBALS数组来定义全局变量,并将所有主题的全局变量嵌套到它们自己的“命名空间”数组中,如下所示:

functions.php内部初始化您的$GLOBALS变量

// from inside functions.php
$GLOBALS['THEME_NAME'] = array();

在模板文件中,初始化主题选项

$GLOBALS['THEME_NAME'] = array();
$GLOBALS['THEME_NAME']['header_choice'] = of_get_option( 'headerstyle', 'default' );
get_header();

在您的header.php文件中,您可以像这样访问它:

// from inside header.php
if ($GLOBALS['THEME_NAME']['header_choice'] == 'some_option') {
    // do some work
}