Jquery 在JSON API Wordpress上启用CORS

Jquery 在JSON API Wordpress上启用CORS,jquery,json,wordpress,cors,Jquery,Json,Wordpress,Cors,我有一个wordpress站点,它有一个名为JSON API的插件。该插件为wordpress中的内容提供JSON格式。我可以通过添加headerAccess控件Allow Origin:*在wordpress上启用CORS;在php标题上。但是当我尝试JSON API插件提供的url时,CORS不再工作 这是wordpress网站我正在做测试。。。我使用测试cors网站来检查它是否工作,它是。。。 但是当我尝试使用JSON api提供的url时,它就不再工作了。我仍然有错误No'Access

我有一个wordpress站点,它有一个名为JSON API的插件。该插件为wordpress中的内容提供JSON格式。我可以通过添加headerAccess控件Allow Origin:*在wordpress上启用CORS;在php标题上。但是当我尝试JSON API插件提供的url时,CORS不再工作

这是wordpress网站我正在做测试。。。我使用测试cors网站来检查它是否工作,它是。。。

但是当我尝试使用JSON api提供的url时,它就不再工作了。我仍然有错误No'Access Control Allow Origin'


我将感谢你的帮助,谢谢

在将响应发送到浏览器之前,我们可以运行并插入新标题:

第一种方法在每个方法上运行,第二种方法针对特定的方法。下面是第一个的实现,通过注释的方式查找第二个:

add_action( 'json_api', function( $controller, $method )
{
    # DEBUG
    // wp_die( "To target only this method use <pre><code>add_action('$controller-$method', function(){ /*YOUR-STUFF*/ });</code></pre>" );

    header( "Access-Control-Allow-Origin: *" );
}, 10, 2 );
; 标题访问控制允许来源:*; }, 10, 2 ;
好吧,我终于想出了一个简单的方法

您只需添加:

function add_cors_http_header(){
    header("Access-Control-Allow-Origin: *");
}
add_action('init','add_cors_http_header');
在文件api.php中,该文件位于wp-content/plugins/json-api/singletons/api.php中


我希望它能帮助更多有同样问题的人

我使用了一些不同的WordPress API,但是对于那些使用“官方”的人来说,我在使用CORS时遇到了很多麻烦,我发现在.htaccess方法和我偶然发现的一些其他方法之间。。。将它添加到theme functions.php中效果最好

<?php
header("Access-Control-Allow-Origin: *"); 
class JSON_API {

  function __construct() {
    $this->query = new JSON_API_Query();
    $this->introspector = new JSON_API_Introspector();
    $this->response = new JSON_API_Response();
    add_action('template_redirect', array(&$this, 'template_redirect'));
    add_action('admin_menu', array(&$this, 'admin_menu'));
    add_action('update_option_json_api_base', array(&$this, 'flush_rewrite_rules'));
    add_action('pre_update_option_json_api_controllers', array(&$this, 'update_controllers'));
  }

  function template_redirect() {

请确保不要使用这些.htaccess、header.php、api.php、functions.php的任何组合,因为它们会对您生气。

在wordpress goto plugins>JSON api>Edit中

从右侧的文件选择中选择

json api/singleton/api.php

您需要添加以下行

headerAccess控制允许原点:*

完成后,您的代码应该与此类似。在其他地方添加此行可能无法按预期工作


对于任何有多个来源的问题的人

在承载wordpress站点的服务器中,导航到../wp content/plugins/json rest api,然后从这里打开plugin.php文件

在这个函数中

header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );
更改标题

header( 'Access-Control-Allow-Origin: *' );


希望这能帮助那些在WordPress项目中遇到与我相同问题的人转到以下文件并执行以下操作:

在wp includes/rest-api.php中更改:

致:

在wp includes/http.php更改中:

致:


现在RESTAPI与core合并了,我们可以使用REST\u API\u init操作


WordPress 5 4.4+实际上可以通过WP头处理它:

试试这个:

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $allowed_domains = array( 'https://my.okdomain.com' , 'http://anothergoodone.com');
    if ( ! in_array( $_SERVER[ 'HTTP_ORIGIN' ] , $allowed_domains ) ) return $headers;
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}
请注意,这将允许从任何源进行访问。为了安全起见,您应该尝试设置一组允许的域,这些域可以向您的WordPress站点发出请求,如果发出请求的域不在允许列表中,则应短路允许COR:

add_filter('rest_url', function($url) {
    $url = str_replace(home_url(), site_url(), $url);
    return $url;
});

该解决方案与WordPress 5.1.1和Gutenberg配合使用

add_action( 'rest_api_init', function () {
    add_action( 'rest_pre_serve_request', function () {
        header( 'Access-Control-Allow-Headers: Authorization, Content-Type, X-WP-Wpml-Language', true );
        header("Access-Control-Allow-Origin: *");
    } );
}, 15 );

使用Wordpress 5.2.3-在外部使用GET和POST时,以下内容最终为我打开了sesame。我尝试了上面所有的答案,但都没有找到适合我的案例的解决方案



希望WordPress将来会有一个用于CORS控制的官方doggy doggy Doug flap。

json rest api插件的操作是:json_insert_post、json_insert_user、json_query_navigation_Header、wp_json_server_before_serveThis for v1、,但是我又遇到了这个问题——我还没有在v2上找到任何运气。使用WordPressAPIv2。我能找到的最好的解决方案。这是唯一适合我的解决方案。某些服务器不允许您在HTACCEST中设置CORS这对我有用!测试并确保其正常工作的一个好方法是检查标题-高级Rest客户端是一个很好的工具。这在Wordpress V5中对我不起作用,我检查了标题,但我的标题不在其中。对于任何像我一样感到困惑的人,请在编辑核心文件之前将此添加为第一行,使用过滤器更好。每次wordpress更新时,这一行更改都会被删除,并被否决。正如@IvanCastellanos所说,这是一个非常脏的修复程序,当wordpress更新时会丢失。在我的文件中找不到wp content/plugins/json api/singletons/api.php。在/wp includes/rest api中找到与rest api相关的内容,但如果需要更改,请使用idk。您不想更改wp includes文件夹,因为如果更新,该文件夹可能会被删除。切勿更改wp核心文件。任何看这个问题的人,不要使用这个答案,这很危险。我应该将这个添加到哪个文件?@HaseebBurki上面的代码扩展了一个操作。您可以将此代码添加到主题的functions.php文件中,也可以添加到新的自定义插件中。您在主题文件夹中添加此文件的确切位置。@chinosojohnson functions.php如果未安装json api怎么办?有人知道将此代码放在何处吗?
header( 'Access-Control-Allow-Origin: ' . $origin );
header( 'Access-Control-Allow-Origin: *' );
header( 'Access-Control-Allow-Origin: ' . $origin );
header( 'Access-Control-Allow-Origin: *' );
add_action( 'rest_api_init', function()
{
    header( "Access-Control-Allow-Origin: *" );
} );
add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}
add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $allowed_domains = array( 'https://my.okdomain.com' , 'http://anothergoodone.com');
    if ( ! in_array( $_SERVER[ 'HTTP_ORIGIN' ] , $allowed_domains ) ) return $headers;
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}
add_filter('rest_url', function($url) {
    $url = str_replace(home_url(), site_url(), $url);
    return $url;
});
add_action( 'rest_api_init', function () {
    add_action( 'rest_pre_serve_request', function () {
        header( 'Access-Control-Allow-Headers: Authorization, Content-Type, X-WP-Wpml-Language', true );
        header("Access-Control-Allow-Origin: *");
    } );
}, 15 );