web-dev-qa-db-ja.com

JSON APIでCORSを有効にするWordpress

私はこれを持っていますwordpress JSON APIと呼ばれるプラグインを備えたサイト。このプラグインはワードプレス内のコンテンツにJSON形式を提供します。wordpress phpヘッダーにheader( "Access-Control-Allow-Origin:*");を追加します。しかし、JSON APIプラグインが提供するURLを試してみると、CORSは機能しなくなりました。

これはwordpressサイトでテストを行っていました...テストCORS Webサイトを使用して、それが機能しているかどうかを確認しました... http:// kiwa-app.loading.net/

しかし、JSON APIが提供するURLを試してみると、もう機能していません。 「Access-Control-Allow-Origin」というエラーはまだありません http://kiwa-app.loading.net/?json=info

私はいくつかの助けに感謝します!!!

17

OK、ついに簡単な方法を見つけました...

追加するだけです:

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

ファイルapi.phpで、このファイルはwp-content/plugins/json-api/singletons/api.phpにあります

同じ問題を抱えるより多くの人々に役立つことを願っています!

14

私はいくつかの異なる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)を使用しないようにしてください。怒っているので注意してください。

25
sheriffderek

応答がブラウザーに送信される前に、 2つのアクションフック を実行して、新しいheader()を挿入できます。

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

最初のメソッドはすべてのメソッドで実行され、2番目のメソッドは特定のメソッドを対象としています。以下は、最初の実装をコメント付きで検索する方法を示した実装です。

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

In wordpress goto plugins> JSON API> Edit

右側のファイル選択から選択

json-api/singletons/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() {
2
Basil Abbas

REST APIがコアとマージされたので、rest_api_initアクション。

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

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サイトにリクエストを送信し、リクエストを行っているドメインが許可リスト:

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;
}
1
Lance Cleveland

WordPressプロジェクトでは、次のファイルに移動して次のようにします。

wp-includes/rest-api.php 変化する:

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

に:

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

wp-includes/http.php 変化する:

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

に:

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

複数の起源でこの問題を抱えている人のために

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
njsokol

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

うまくいけばWordPressは、将来的にCORS制御のための公式の犬のドアフラップを持つでしょう。

0
Grant