有没有办法让WordPress的ajaxurl实现跨域资源共享?

时间:2015-08-18 作者:Abel Melquiades Callejo

WordPress已经有了jQuery WordPress应用程序调用的默认URL,它被称为ajaxurl. 然而,在某些情况下,需要启用Cross-Origin Resource Sharing (CORS),这样任何主机名都可以使用它进行访问。

我当前的解决方案是在/wp-includes/http.php 使用:

@header( \'Access-Control-Allow-Origin: *\' );
以便:

http。php

...
function send_origin_headers() {
    $origin = get_http_origin();

    @header( \'Access-Control-Allow-Origin: *\' );
    if ( is_allowed_http_origin( $origin ) ) {
        @header( \'Access-Control-Allow-Origin: \' .  $origin );
        @header( \'Access-Control-Allow-Credentials: true\' );
        if ( \'OPTIONS\' === $_SERVER[\'REQUEST_METHOD\'] )
            exit;
        return $origin;
    }

    if ( \'OPTIONS\' === $_SERVER[\'REQUEST_METHOD\'] ) {
        status_header( 403 );
        exit;
    }

    return false;
}
...
它可以工作,但编辑WordPress核心并不是一个好的解决方案。

是否有更好的方法为ajaxurl?

警告

This topic contains security vulnerabilities 在wordpress安装上实际实现时。

注:这个问题是在Wordpress 4.3. 当Wordpress 4.4 与新功能一起发布WordPress REST API, 不再需要启用CORS,只需使用rest_api_init 挂钩到add custom REST endpoints.

4 个回复
SO网友:Julian

米洛是对的。

例如,转到主题的功能。php文件,并添加以下内容:

add_filter( \'allowed_http_origins\', \'add_allowed_origins\' );
function add_allowed_origins( $origins ) {
    $origins[] = \'https://site1.example.com\';
    $origins[] = \'https://site2.example.com\';
    return $origins;
}
现在,来自https://site1.example.com 到您站点的ajax url将具有相应的访问控制,允许在响应中使用源标题。例如:。

$.ajax({
    url: \'https://site1.example.com/wp-admin/admin-ajax.php\',
    type: "POST",
    data: {
        ...
    },
    success: function(doc) {
        ...
    }
});

SO网友:Ali Raza

只需将此代码添加到函数中。php,无需更新.htaccess, /wp-includes/http.php 或任何其他核心文件。

function just_add_cors_http_header($headers){

    $headers[\'Access-Control-Allow-Origin\'] = \'*\';

    return $headers;

}

add_action(\'wp_headers\',\'just_add_cors_http_header\');
干杯!

SO网友:Sundar

您可以通过以下代码实现它。

打开你的门header.php

在该文件中查找以下文本

< !DOCTYPE html>
并将其替换为以下内容。

<?php /** @package WordPress @subpackage Default_Theme  **/
header("Access-Control-Allow-Origin: *"); 
?>
<! DOCTYPE html>
...
现在您可以在标题中找到Access Control Allow Origin:*。

希望这有帮助。。!干杯

SO网友:Saurabh

据我所知,最好的方法是,我遵循这个链接。

只需将源代码添加到WordPressheader.php 或ajaxfunctions/api 文件

Link: [https://stackoverflow.com/a/25719261/5431206]

谢谢

结束

相关推荐

未定义jQuery,但在源代码中加载了jQuery脚本

我是Wordpress的新手,我正在尝试在静态主页上使用JQuery。我遇到了臭名昭著的“未捕获引用错误:未定义JQuery”错误,尽管在页面源代码中加载了JQuery脚本。在我的主题功能中。php:function load_jquery() { wp_deregister_script(\'jquery\'); wp_register_script(\'jquery\', \'https://ajax.googleapis.com/ajax/libs/jq