web-dev-qa-db-fra.com

Existe-t-il un moyen d'activer le partage de ressources d'origine multiple pour WordPress 'ajaxurl?

WordPress a déjà une URL par défaut pour les appels d’applications jQuery-WordPress et elle est connue sous le nom de ajaxurl. Cependant, il existe des cas dans lesquels il faudrait activer le partage de ressources d'origine croisée (CORS) sur celui-ci de sorte que tout nom d'hôte puisse y accéder.

Ma solution actuelle consiste à ajouter une ligne dans /wp-includes/http.php avec:

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

Tel qu'il sera:

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

Cela fonctionne, mais éditer le noyau WordPress n’est pas une bonne solution.

Existe-t-il un meilleur moyen d'activer CORS pour la ajaxurl?

5

Milo a raison.

Par exemple, accédez au fichier functions.php de votre thème et ajoutez ce qui suit:

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

Maintenant, un appel ajax depuis https://site1.example.com vers l'URL ajax de votre site aura l'en-tête approprié dans la réponse. par exemple.

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

Vous pouvez y arriver avec le code suivant.

Ouvrez vous header.php

trouver le texte suivant dans ce fichier

< !DOCTYPE html>

et remplacez-le par le suivant.

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

Maintenant, vous pouvez trouver Access-Control-Allow-Origin: * dans votre en-tête.

J'espère que cela aide ..!.

0
Sundar