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:
...
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
?
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) {
...
}
});
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 ..!.