出于某种原因,每当我尝试将变量放在get_header
的WordPress自定义page.php中时,它都无法识别该值并重置为默认值。
这是我的代码:
$header_choice = of_get_option( 'headerstyle', 'default' );
get_header( $header_choice );
of_get_option是来自Options Framework
的函数这是因为我使用的是多站点,如果高级用户可以自行更改每个站点的标头而不必深入了解代码或不得不向我们询问开发人员,那将会很棒。
如何在get_header
中使用变量,以便我可以动态分配值?
答案 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
}