web-dev-qa-db-ja.com

WordPressのajaxurlでクロスオリジンリソース共有を有効にする方法はありますか?

WordPressにはすでにjQuery-WordPressアプリケーション呼び出し用のデフォルトURLがあり、それはajaxurlとしてよく知られています。ただし、任意のホスト名がそれを使用してアクセスできるように、 クロスオリジンリソース共有 (CORS)を有効にする必要がある場合があります。

私の現在の解決策は/wp-includes/http.phpに次の行を追加することです。

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

そのようになります:

http.php

...
function send_Origin_headers() {
    $Origin = get_http_Origin();

    @header( 'Access-Control-Allow-Origin: *' );
    if ( is_allowed_http_Origin( $Origin ) ) {
        @header( 'Access-Control-Allow-Origin: ' .  $Origin );
        @header( 'Access-Control-Allow-Credentials: true' );
        if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] )
            exit;
        return $Origin;
    }

    if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) {
        status_header( 403 );
        exit;
    }

    return false;
}
...

それはうまくいきますが、WordPressコアを編集することは良い解決策ではありません。

ajaxurlに対してCORSを有効にするより良い方法はありますか?

ミロは正しいです。

例えば、あなたのテーマのfunctions.phpファイルに行き、そして以下を追加してください:

add_filter( 'allowed_http_origins', 'add_allowed_origins' );
function add_allowed_origins( $origins ) {
    $origins[] = 'https://site1.example.com';
    $origins[] = 'https://site2.example.com';
    return $origins;
}

https://site1.example.com からあなたのサイトのajax URLへのajax呼び出しは、応答に適切なAccess-Control-Allow-Originヘッダを持つようになります。例えば。

$.ajax({
    url: 'https://site1.example.com/wp-admin/admin-ajax.php',
    type: "POST",
    data: {
        ...
    },
    success: function(doc) {
        ...
    }
});
10
Julian

次のコードでそれを達成することができます。

あなたを開きます header.php

そのファイルで次のテキストを見つけます

< !DOCTYPE html>

そして次のものと交換してください。

<?php /** @package WordPress @subpackage Default_Theme  **/
header("Access-Control-Allow-Origin: *"); 
?>
<! DOCTYPE html>
...

今すぐあなたのヘッダーにAccess-Control-Allow-Origin:*を見つけることができます。

これが役立つことを願っています..!.

0
Sundar