Как включить Cross-Origin Resource Sharing для ajaxurl в WordPress?
WordPress уже имеет стандартный URL для вызовов jQuery-WordPress, известный как ajaxurl
. Однако бывают случаи, когда необходимо включить Cross-Origin Resource Sharing (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
?
Предупреждение
Эта тема содержит уязвимости безопасности при фактической реализации в установке WordPress.
Примечание
Этот вопрос был задан во времена WordPress 4.3. Когда вышел WordPress 4.4 с новой функцией WordPress REST API, необходимость в включении CORS отпала, и вместо этого стало возможным использовать хук rest_api_init
для добавления пользовательских конечных точек REST.

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

Просто добавьте этот код в ваш файл function.php, не нужно обновлять .htaccess
, /wp-includes/http.php
или любые другие системные файлы.
function just_add_cors_http_header($headers){
// Разрешаем доступ с любого домена
$headers['Access-Control-Allow-Origin'] = '*';
return $headers;
}
// Добавляем наш фильтр к заголовкам WordPress
add_filter('wp_headers','just_add_cors_http_header');
Удачи!

Вы можете добиться этого с помощью следующего кода.
Откройте ваш файл header.php
найдите в этом файле следующий текст
<!DOCTYPE html>
и замените его на следующий код.
<?php /** @package WordPress @subpackage Default_Theme **/
header("Access-Control-Allow-Origin: *");
?>
<!DOCTYPE html>
...
Теперь вы увидите Access-Control-Allow-Origin: * в ваших заголовках.
Надеюсь, это поможет..! Удачи.

Лучший способ, который я нашел, следовал по этой ссылке.
Просто добавьте исходный код в файл header.php WordPress или в файл ajax functions/api.
Ссылка: [https://stackoverflow.com/a/25719261/5431206]
Спасибо
