2016-02-19 142 views
-1

我继承了一个wordpress网站,该网站将主要的javascript存储在.php文件中,因为它使用了在站点的其他php模板中设置的全局变量。因此,例如,主要的Javascript文件使用条件语句依靠PHP变量是这样的:为javascript和php建立全局变量

<?php if ($GLOBALS['page_class'] == 'news' ?> 
     $("foo").someJavaScriptAction(); 

我的任务是重新写这个主要javascript文件是一个纯粹的.js文件,而不是依赖于任何PHP。有没有一种方法可以检查.js文件中的那些php变量?如果没有,在新的.js文件中检查这些变量的策略是什么?

+2

不幸的是,编写代码的人做了一件糟糕的工作。 Wordpress有自己的处理方式,使用[wp_localize_script](https://codex.wordpress.org/Function_Reference/wp_localize_script) – adeneo

+0

你可以'var wpvars = <?php echo json_encode($ GLOBALS)?>'脚本标记,以便它可以从'window'解析。然后遍历'window.wpvars'上的.js文件中的对象。 – jtrumbull

+0

除了根据其他注释注入JSON之外,如果JS块很大,可以将它们分割成.js文件,并使用[wp_enqueue_script](https://developer.wordpress.org/reference/functions/wp_enqueue_script/)有条件地排队他们。您也可以使用CSS类来触发行为 - 例如'if($(“。page_class”))$(“foo”)....' – Kenney

回答

1

在WordPress的这样做的真正的,正确的方法是用wp_localize_script(在主题中使用此的functions.php):

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); 
} 

然后访问var1的script.js只是做如下:script_vars.var1

+0

对于我应该使用的变量数量有任何限制吗?我的意思是说,使用较少变量的性能有任何争论?我想我会使用大约10. – beliy333

+1

否这个数量的变量是完全没问题的。如果你还有更多的东西,一个更清洁的解决方案应该是'json_encode',以便在JS中解码它并获得一个唯一的对象。这可能会影响性能,只是有很多变量,比如数百。 – vard