2013-06-22 4 views
0

У меня есть пользовательский файл jquery на сайте Wordpress, и я пытаюсь использовать bloginfo ('template_directory'), назначенный переменной, используемой в URL-адресах ajax, а не каждый раз указывая полный URL-адрес (особенно, поскольку он находится в разработке на тестовом сайте в настоящий момент, поэтому необходимо обеспечить, чтобы все работало при переходе на сайт в реальном времени на фактический домен), однако все, что происходит, это то, что php добавлен в URL-адрес, а не путь к каталогу.Wordpress bloginfo ('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) 
      {. 
. 
. 
      } 
     }); 
    }); 

А что я получаю в ошибке консоли есть (сайт URL заменен ...):

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') ?>";

К счастью, вы все еще можете использовать переменные javascript из других скриптов или непосредственно в html.

Это одно решение.

Это ваш схож с вашим скриптом, но с несколькими изменениями. Внимательно прочитайте.

$(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_localize_script вызывается только при загрузке указанного сценария с wp_enqueue_script. В этом случае я использовал jquery.

wp_localize_script в основном используется для интернационализации, но может использоваться для других данных.

Вот страница Codex: http://codex.wordpress.org/Function_Reference/wp_localize_script

+0

Я добавил это к своим функциям.php и изменил javascript, но ничего не загружается в заголовок страницы, как указано? –

+0

Жаль мою ошибку. Я сделал плохое предположение. Я думал, что вы загружаете jquery с помощью функции 'enqueue_script'. Я пересмотрел свой ответ, чтобы отразить это. 'Wp_localize_script' загружается, когда jquery загружается в этом примере. Но, как вы узнали, решение Gautam3164 работает и проще. – Gohn67