不是真的。
在WordPress中加载模板的任何内容最终都是include() 或require() 并且只有调用者函数作用域(当然还有全局作用域)中的变量才会传递到包含的文件:
function foo() {
$bar = 1;
include( \'/path/to/template.php\' );
}
$baz = 2;
foo();
// template.php:
echo $bar; // 1
echo $baz; // undefined
因此,要使您所描述的工作正常,您必须更改Core的行为
load_template() 执行实际
require(). 但还有其他方法。以下是一些:
全局范围(没有人喜欢全局范围):
$GLOBALS[\'myvar\'] = 1; // will be accessible from anywhere
静态类属性:
class My_Class {
public static $myvar;
}
My_Class::$myvar = 1;
My_Class::$myvar 如果在加载模板之前声明了类并更改了静态变量,则可以在模板中访问。这几乎就像使用全局范围,但更干净。
希望有帮助!