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