web-dev-qa-db-de.com

Gibt es eine Möglichkeit, Cross-Origin Resource Sharing für Ajaxurl von WordPress zu aktivieren?

WordPress hat bereits eine Standard-URL für jQuery-WordPress-Anwendungsaufrufe und ist als ajaxurl bekannt. Es gibt jedoch Fälle, in denen man Cross-Origin Resource Sharing (CORS) aktivieren muss, damit jeder Hostname darauf zugreifen kann.

Meine aktuellen Lösungen sind durch Hinzufügen einer Zeile in /wp-includes/http.php mit:

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

So dass es sein wird:

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

Es funktioniert, aber das Bearbeiten des WordPress-Kerns ist keine gute Lösung.

Gibt es eine bessere Möglichkeit, CORS für die ajaxurl zu aktivieren?

Milo ist richtig.

Gehen Sie zum Beispiel zur Datei functions.php Ihres Themas und fügen Sie Folgendes hinzu:

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

Bei einem Ajax-Aufruf von https://site1.example.com an die Ajax-URL Ihrer Site wird in der Antwort der entsprechende Access-Control-Allow-Origin-Header angezeigt. z.B.

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

Sie können es durch den folgenden Code erreichen.

Öffne dich header.php

suchen Sie den folgenden Text in dieser Datei

< !DOCTYPE html>

und ersetzen Sie es mit dem folgenden.

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

Jetzt können Sie Access-Control-Allow-Origin: * in Ihrer Kopfzeile finden.

Hoffe das hilft ..! Prost.

0
Sundar