有比这更简单的方法。正如@Wyck已经指出的,使用globals是个坏主意,这里有一个简短的解释,以及如何:
为什么globals不好:
1)每个人都可以在任何地方访问它们。首先,这听起来不错,但您也可以执行以下操作:
// Your code: default value
global $foo;
$foo = \'bar\';
// User setting:
global $foo;
$foo = get_option( \'baz\' );
// Later in your code
if ( \'bar\' === $foo )
// do something important
// Now I, the end user, do this in a template
// or Ernie, the novice developer, does this in his 3rd party plugin:
$GLOBALS[\'foo\'] = 42;
突然间,一切都不如预期。很简单:全局变量可以被截获。他们不是没有冲突的,没有人可以
ever 确保它们包含的内容。
2) 当你知道他们可以在飞行中改变后,你就会知道他们unpredictable. 如果您想用IDE追溯它们(例如PHPStorm、Eclipse/Aptana等),那么您永远无法找到它们的来源或者它们的确切更改位置。。。除非你坐了很长一段时间,使用断点和XDebug之类的东西,并了解自己的方法。
3) 我真的需要写更多吗?我想不是。
结论:由于大多数选项都是自动加载的,因此它们已经出现在每个页面/请求中,不需要包装在全局中。简单呼叫get_option()
只要你需要它。
示例:(可用于login_enqueue_scripts
和admin_enqueue_scripts
挂钩)
add_action( \'wp_enqueue_scripts\', \'wpse115840_scripts\' );
function wpse115840_scripts()
{
wp_enqueue_script( \'wpse_handle\', etc... );
// Here goes the magic:
wp_localize_script( \'wpse_handle\', \'wspeObject\', array(
\'foo\' => \'bar\',
\'bar\' => get_option( \'baz\' )
) );
}
现在,您可以访问
wp_localize_script()
javascript文件中的数组(第三个参数),您只需调用
wpseObject
. 下面的示例现在将为您提供值
bar
:
console.log( wpseObject.foo );
还有你的
wpseObject.bar
会让你
baz
设定值。