将WordPress模板目录传递到AJAX URL调用

时间:2018-05-17 作者:Mona Coder

你能告诉我如何传递模板目录而不是

http://localhost:8080/WP/wp-content/themes/twentyseventeen/data.php

进入ajax调用的URL选项,如下所示

var request = $.ajax({
    type: "POST",
    url: "http://localhost:8080/WP/wp-content/themes/twentyseventeen/data.php",
    cache: false,
    dataType: "HTML",
    success: function() {}
});

1 个回复
SO网友:Tom J Nowell

我怀疑您不想将URL硬编码到data.php, 但使用独立文件处理主题或插件中的请求是一个主要的安全问题。

相反,使用REST API端点。

例如,让我们注册data 端点:

add_action( \'rest_api_init\', function () {
        register_rest_route( \'monacoder/v1\', \'/data/\', array(
                \'methods\' => \'POST\',
                \'callback\' => \'monacoder_data\'
        ) );
} );
function monacoder_data( $request ) {
    return "response";
}
现在我们可以看到如果我们POST 请求http://localhost:8080/WP/wp-json/monacoder/v1/data/ 在javascript中,它以值响应"response". 代码可以进入您的functions.php 或插件,只需确保已打开永久链接。

此外,我们可以将wp-api 图书馆:

wp_enqueue_script( \'wp-api\' );
现在,您可以在wpApiSettings.root, 因此,您可以这样做:

jQuery.ajax({
    type: "POST",
    url: wpApiSettings.root + "monacoder/v1/data",
    success: function() {
        // do something
    }
});
您还可以使用wp-api 用于获取帖子的库,例如:

var postsCollection = new wp.api.collections.Posts();
postsCollection.fetch();
postsCollection.forEach(function( post ) {
    console.log( post );
});

结束

相关推荐

在AJAX终结点中编码代码片段

我一直在寻找方法来做到这一点,这就是我目前所拥有的。正如你所看到的,我已经尝试了很多事情,我四处看看,这类问题的所有答案都是关于如何启用执行,而不是禁用它,如果可能的话,我希望不必使用插件。这里不显示pre和code标记,但您会看到,在这之前和之后都有pre、code和textarea readonly=“readonly”标记。我还尝试使用esc\\U html,但没有成功。 esc_html(add_action('wp_ajax_nopriv_mytheme