Există o modalitate de a activa Cross-Origin Resource Sharing pentru ajaxurl în WordPress?
WordPress are deja un URL implicit pentru apelurile jQuery-WordPress, cunoscut sub numele de ajaxurl
. Cu toate acestea, există cazuri în care este necesară activarea Cross-Origin Resource Sharing (CORS) pentru ca orice hostname să poată avea acces la acesta.
Soluția mea actuală este adăugarea unei linii în /wp-includes/http.php
cu:
@header( 'Access-Control-Allow-Origin: *' );
Astfel încât va arăta:
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;
}
...
Funcționează, dar editarea nucleului WordPress nu este o soluție bună.
Există o modalitate mai bună de a activa CORS pentru ajaxurl
?
Avertisment
Acest subiect conține vulnerabilități de securitate atunci când este implementat efectiv într-o instalare WordPress.
Notă
Această întrebare a fost postată în perioada WordPress 4.3. Când a fost lansată versiunea WordPress 4.4 cu noua funcționalitate WordPress REST API, activarea CORS nu mai este necesară, în schimb se poate folosi hook-ul rest_api_init
pentru adăugarea de endpoint-uri REST personalizate.

Milo are dreptate.
De exemplu, accesează fișierul functions.php al temei tale și adaugă următorul cod:
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;
}
Acum un apel AJAX de la https://site1.example.com către URL-ul AJAX al site-ului tău va avea în răspuns header-ul Access-Control-Allow-Origin corespunzător. De exemplu:
$.ajax({
url: 'https://site1.example.com/wp-admin/admin-ajax.php',
type: "POST",
data: {
...
},
success: function(doc) {
...
}
});

Doar adaugă acest cod în fișierul tău functions.php, nu este nevoie să actualizezi .htaccess
, /wp-includes/http.php
sau orice alt fișier de bază.
function just_add_cors_http_header($headers){
$headers['Access-Control-Allow-Origin'] = '*';
return $headers;
}
add_filter('wp_headers','just_add_cors_http_header');
Noroc!

Puteți realiza acest lucru folosind următorul cod.
Deschideți fișierul header.php
Găsiți următorul text în acel fișier
< !DOCTYPE html>
și înlocuiți-l cu următoarele:
<?php /** @package WordPress @subpackage Default_Theme **/
header("Access-Control-Allow-Origin: *");
?>
<! DOCTYPE html>
...
Acum veți găsi Access-Control-Allow-Origin: * în header.
Sper că vă ajută..! Noroc.

Cel mai bun mod pe care l-am găsit, am urmat acest link.
Doar adaugă codul sursă în fișierul WordPress header.php sau în fișierul ajax functions/api.
Link: [https://stackoverflow.com/a/25719261/5431206]
Mulțumesc
