Есть ли способ включить совместное использование ресурсов Cross-Origin для ajaxurl WordPress?

У WordPress уже есть URL-адрес по умолчанию для вызовов приложений jQuery-WordPress, и он хорошо известен как ajaxurl . Тем не менее, бывают случаи, когда нужно было бы разрешить совместное использование ресурсов Cross-Origin (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 не является хорошим решением.

Есть ли лучший способ включить CORS для ajaxurl ?

Мило прав.

Например, перейдите в файл 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; } 

Теперь вызов ajax от https://site1.example.com к URL-адресу ajax вашего сайта будет иметь соответствующий заголовок Access-Control-Allow-Origin в ответе. например.

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

Вы можете достичь этого с помощью следующего кода.

Откройте файл header.php

найти следующий текст в этом файле

 < !DOCTYPE html> 

и замените его следующим.

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

Теперь вы можете найти Access-Control-Allow-Origin: * в своем заголовке.

Надеюсь, это поможет …!