Wordpress bloginfo('template_directory')无法在jquery中运行

时间:2013-06-22 06:25:56

标签: php jquery wordpress

我在wordpress网站上有一个自定义jquery文件,我试图使用分配给变量的bloginfo('template_directory')在ajax url路径中使用,而不是每次都要输入完整的url(特别是因为此时正在测试站点上进行开发所以需要确保在移动到实际域上的实时站点时一切正常),但是所有发生的事情都是将php添加到url而不是目录路径。 / p>

我现在所拥有的:

$(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)

任何人都可以对此有所了解。

2 个答案:

答案 0 :(得分:1)

您需要创建一个Javascript片段,将模板目录保存在变量中,稍后您可以使用该变量

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

答案 1 :(得分: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');

这将导致在html页面中添加以下javascript片段。

<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会为您提供文件路径,而不是您想要的网址。

使用此方法时,只有在使用wp_localize_script加载指定的脚本时才会调用wp_enqueue_script。在这种情况下,我使用了jquery

wp_localize_script主要用于国际化,但可用于其他数据。

以下是codex页面:http://codex.wordpress.org/Function_Reference/wp_localize_script