在JSON API Wordpress上启用CORS

问题描述 投票:15回答:9

我有一个带有一个名为JSON API的插件的wordpress网站。此插件为wordpress中的内容提供JSON格式。我能够通过添加标题(“Access-Control-Allow-Origin:*”)在wordpress上启用CORS;在php标题上。但是当我尝试使用JSON API插件提供的URL时,CORS不再起作用了。

这是wordpress网站,我正在做测试...我使用测试cors网站检查它是否正常工作,它是... http://kiwa-app.loading.net/

但是,当我尝试使用JSON api提供给我的URL时,不再工作了。我仍然有错误No'Access-Control-Allow-Origin'http://kiwa-app.loading.net/?json=info

我将非常感谢一些帮助,谢谢!

jquery json wordpress wordpress-plugin cors
9个回答
21
投票

我使用了一些不同的WordPress API - 但是对于那些使用'官方'WP-API的人来说,我在这个CORS上遇到了很多麻烦 - 而我发现的是.htaccess方法与其他一些方法我偶然发现了...将此添加到您的主题functions.php工作得最好。

function add_cors_http_header(){
    header("Access-Control-Allow-Origin: *");
}
add_action('init','add_cors_http_header');

一定不要使用这些组合(.htaccess,header.php,api.php,functions.php),因为它会对你生气。


14
投票

好的,我终于找到了一个简单的方法......

你只需要添加:

     <? header("Access-Control-Allow-Origin: *"); ?>

在文件api.php上,此文件位于wp-content / plugins / json-api / singletons / api.php

我希望它可以帮助更多人解决同样的问题!


7
投票

在将响应发送到浏览器之前,我们可以运行two action hooks并插入新的header()

do_action("json_api", $controller, $method);
do_action("json_api-{$controller}-$method");

第一个运行在每个方法上,第二个是针对特定方法。这是第一个的实现,用注释的方式找到第二个:

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 );

2
投票

在wordpress goto插件> JSON API>编辑

从右侧文件选择中选择

JSON-API /单身/ api.php

您需要添加以下行

header(“Access-Control-Allow-Origin:*”);

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

<?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() {

1
投票

现在REST API与核心合并,我们可以使用rest_api_init动作。

add_action( 'rest_api_init', function()
{
    header( "Access-Control-Allow-Origin: *" );
} );

0
投票

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

在托管wordpress站点的服务器中,导航到../wp-content/plugins/json-rest-api,然后从此处打开plugin.php文件。

在这个功能

function json_send_cors_headers( $value ) {..}

更改标题

header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );

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

希望这有助于任何引发与我相同问题的人。


0
投票

在wordpress项目中转到以下文件并执行此操作

在we-includes / rest-api.php中将header( 'Access-Control-Allow-Origin: ' . $origin );更改为header( 'Access-Control-Allow-Origin: *');。 在we-includes / http.php中将header( 'Access-Control-Allow-Origin: ' . $origin );更改为header( 'Access-Control-Allow-Origin: *');


0
投票

WordPress 5(实际上是4.4+)可以通过WP Headers处理它:

试试这个:

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_ORIGIN' ];
    return $headers;
}

请注意,这将允许从任何来源访问。为了安全起见,您应该尝试做一些事情,比如设置一个允许域的数组,这些域可以向WordPress站点发出请求,并且如果发出请求的域不在允许的列表中,则允许CORS短路:

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;
}

-2
投票

该解决方案适用于WordPress 5.1.1和Gutenberg

add_filter('rest_url', function($url) {
    $url = str_replace(home_url(), site_url(), $url);
    return $url;
});
© www.soinside.com 2019 - 2024. All rights reserved.