Jquery 在JSON API Wordpress上启用CORS
我有一个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'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
我将感谢你的帮助,谢谢 在将响应发送到浏览器之前,我们可以运行并插入新标题: 第一种方法在每个方法上运行,第二种方法针对特定的方法。下面是第一个的实现,通过注释的方式查找第二个:
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 );