2016-02-19 73 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