为javascript和php建立全局变量
我继承了一个wordpress网站,该网站将主javascript存储在一个.php文件中,因为它使用在该网站的其他php模板中设置的全局变量。例如,主javascript文件使用依赖于php变量的条件,如下所示:为javascript和php建立全局变量,javascript,php,wordpress,Javascript,Php,Wordpress,我继承了一个wordpress网站,该网站将主javascript存储在一个.php文件中,因为它使用在该网站的其他php模板中设置的全局变量。例如,主javascript文件使用依赖于php变量的条件,如下所示: <?php if ($GLOBALS['page_class'] == 'news' ?> $("foo").someJavaScriptAction(); 在Wordpress中实现这一点的真正、正确的方法是使用(在theme functions.php中
<?php if ($GLOBALS['page_class'] == 'news' ?>
$("foo").someJavaScriptAction();
在Wordpress中实现这一点的真正、正确的方法是使用(在theme functions.php中使用):
然后,要访问script.js中的
var1
,只需执行以下操作:script\u vars.var1
不幸的是,编写该代码的人做得很糟糕。Wordpress有自己的处理方法,可以在脚本标记内部使用var wpvars=
,这样就可以从窗口中解析它。然后从.js文件中的window.wpvars
遍历对象。除了根据其他注释注入JSON外,如果js片段较大,可以将它们拆分为.js文件,并使用有条件地对它们进行排队。您还可以使用CSS类来触发该行为—类似于if($(“.page_class”))$($foo”)..
我应该使用的变量数量是否有任何限制?我的意思是,是否有任何理由支持性能使用更少的变量?我想我会用10个左右。不,对于那个数量的变量,这是完全可以的。如果你想得到更多,一个更干净的解决方案是json\u编码
it,以便在JS中解码它并获得一个唯一的对象。它可能会影响性能,仅仅是使用大量的变量,比如100个。
function enqueue_scripts() {
wp_register_script('theme-script', get_stylesheet_directory_uri() . '/js/script.js', array('jquery'), '', true);
wp_localize_script('theme-script', 'script_vars', array(
'var1' => $GLOBALS['var1'],
'var2' => $GLOBALS['var2']
));
wp_enqueue_script(theme-script);
}