Mar*_*lli 18 wordpress jquery json wordpress-plugin cors
我有一个带有一个名为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
我会感谢一些帮助!
she*_*rek 26
我使用了一些不同的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');
Run Code Online (Sandbox Code Playgroud)
一定不要使用这些组合(.htaccess,header.php,api.php,functions.php),因为它会对你生气.
Mar*_*lli 14
好的,我终于找到了一个简单的方法......
你只需要添加:
<? header("Access-Control-Allow-Origin: *"); ?>
Run Code Online (Sandbox Code Playgroud)
在文件api.php上,此文件位于wp-content/plugins/json-api/singletons/api.php
我希望它可以帮助更多人解决同样的问题!
在将响应发送到浏览器之前,我们可以运行两个操作挂钩并插入一个新的header()
:
do_action("json_api", $controller, $method);
do_action("json_api-{$controller}-$method");
Run Code Online (Sandbox Code Playgroud)
第一个运行在每个方法上,第二个是针对特定方法.这是第一个的实现,用注释的方式找到第二个:
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 );
Run Code Online (Sandbox Code Playgroud)
使用 Wordpress 5.2.3 - 在外部使用 GET 和 POST 时,以下最终为我打开了芝麻。在找到适用于我的案例的解决方案之前,我尝试了上述所有答案(无济于事)。
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 );
Run Code Online (Sandbox Code Playgroud)
希望 WordPress 将来会有一个官方的小狗门襟用于 CORS 控制。
现在 REST API 已与核心合并,我们可以使用该rest_api_init
操作。
add_action( 'rest_api_init', function()
{
header( "Access-Control-Allow-Origin: *" );
} );
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这将允许从任何来源进行访问。为了安全起见,您应该尝试执行一些操作,例如设置允许的域数组,这些域可以向您的 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;
}
Run Code Online (Sandbox Code Playgroud)