0

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

我目前拥有的:

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

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

4

2 回答 2

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_localize_script仅当您使用 加载指定的脚本时才会调用wp_enqueue_script. 在这种情况下,我使用了jquery.

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

这是法典页面:http ://codex.wordpress.org/Function_Reference/wp_localize_script

于 2013-06-22T07:24:13.840 回答
1

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

<script type="text/javascript">
    var templateDir = "<?php bloginfo('template_directory') ?>";
</script>
于 2013-06-22T06:30:51.160 回答