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

Gho*_*sty 3 php variables wordpress global-variables

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

这是我的代码:

$header_choice = of_get_option( 'headerstyle', 'default' );
get_header( $header_choice );
Run Code Online (Sandbox Code Playgroud)

of_get_option是Options Framework中的函数

这是因为我正在使用多站点,如果高级用户可以在每个站点自己更改标题而不必深入研究代码或不必问我们开发人员,那就太好了。

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

Jar*_*obb 6

您遇到了可变范围问题。WordPress通过其自身的函数包含标头,get_header()并且您的模板变量不可用。您可能会发现其他人建议您只使用它,include('header.php')但您不想这样做。(get_header()触发其他特定于WordPress的操作,因此请务必予以保留)。

您有两种选择,其中一种是我的选择。

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

global $header_choice = of_get_option( 'headerstyle', 'default' );
get_header();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

// from inside functions.php
$GLOBALS['THEME_NAME'] = array();
Run Code Online (Sandbox Code Playgroud)

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

$GLOBALS['THEME_NAME'] = array();
$GLOBALS['THEME_NAME']['header_choice'] = of_get_option( 'headerstyle', 'default' );
get_header();
Run Code Online (Sandbox Code Playgroud)

header.php文件中,您可以像这样简单地访问它:

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