2013-06-22 30 views
0

我有一個WordPress站點中的自定義jquery文件,我正嘗試使用分配給變量的bloginfo('template_directory')在ajax url路徑中使用,而不是必須每次輸入完整的url(尤其是當前正在測試站點上開發,因此需要確保在移到實際站點上的實時站點時一切正常),但是發生的只是php添加到url中,而不是目錄路徑。WordPress的博客信息('template_directory')不工作在jquery

我在看什麼:

$(document).ready(function(){ 
    var templateDir = "<?php bloginfo('template_directory') ?>"; 

    // Login 
    $('.login-form').on('submit', function(e){ 
     e.preventDefault(); 
     dataString = $(this).serialize() + '&ajax=1'; 
     $.ajax ({ 
      type: "POST", 
      url: templateDir + "/inc/do-login.php", 
      data: dataString, 
      cache: false, 
      success: function(data) 
      {. 
. 
. 
      } 
     }); 
    }); 

而我在控制檯中錯誤的是(網站網址以...替換):

POST http://www......./...../%3C?php%20get_bloginfo('template_directory')%20?%3E/inc/do-login.php 404 (Not Found) 

任何人都可以擺脫任何輕這個請。

+0

這段代碼是在PHP頁面或JS? – swapnesh

+0

這是在JS中,現在我意識到它需要在我的文件中,而不是在js –

回答

1

您需要創建一個JavaScript片段,保存模板目錄中的一個變量,你可以使用這個變量

<script type="text/javascript"> 
    var templateDir = "<?php bloginfo('template_directory') ?>"; 
</script> 
+0

它工作.. ?? – Gautam3164

+0

所以這需要在我的jQuery之外? –

+0

是的,你需要一個JavaScript片段 – Gautam3164

1

您需要將templateDir變量搬出你的JavaScript文件以後使用。原因是因爲你的PHP不會被解釋。這意味着您的templateDir變量將等於"<?php bloginfo('template_directory') ?>";

幸運的是,您仍然可以直接使用其他腳本或HTML中的JavaScript變量。

這是一個解決方案。

這是類似於你的腳本,但有一些修改。仔細讀。

$(document).ready(function(){ 

    // Login 
    $('.login-form').on('submit', function(e){ 
     e.preventDefault(); 
     dataString = $(this).serialize() + '&ajax=1'; 
     $.ajax ({ 
      type: "POST", 
      url: custom.templateDir + "/inc/do-login.php", 
      data: dataString, 
      cache: false, 
      success: function(data) 
      { 

      } 
     }); 
    }); 

現在你functions.php你可以使用使用這種伎倆來補充,可以通過你的腳本訪問JavaScript的變量:

function custom_init_js() 
{ 
    wp_enqueue_script('jquery'); 
    wp_localize_script('jquery', 'custom', array(
     'templateDir' => get_bloginfo('template_url'))); 
} 
add_action('get_header', 'custom_init_js'); 

這將導致在JavaScript中的下面的代碼片段添加到您的html頁面。

<script type='text/javascript'> 
/* <![CDATA[ */ 
var custom = {"templateDir":"https://www.website.org/wp-content/themes/yourTheme/"}; 
/* ]]> */ 

現在你可以在你的腳本中使用custom.templateDir評估你的模板目錄。自定義對象來自wp_localize_script函數。你可以任意命名。

此外,你想使用get_bloginfo('template_url'),因爲template_dir將得到你的文件路徑,而不是URL,這是你想要的。

使用此方法時,僅當您使用wp_enqueue_script加載指定的腳本時才調用wp_localize_script。在這種情況下,我使用了jquery

wp_localize_script主要用於國際化,但可用於其他數據。

這裏是抄本頁面:http://codex.wordpress.org/Function_Reference/wp_localize_script

+0

我已經將此添加到我的functions.php並更改了javascript,但沒有任何內容正在加載到頁眉中,如圖所示? –

+0

對不起,我的錯。我做了一個可憐的假設。我以爲你使用'enqueue_script'函數加載jquery。我修改了我的答案以反映這一點。在本例中加載jquery時,會加載'wp_localize_script'。但是,正如你發現Gautam3164的解決方案也工作,更簡單。 – Gohn67