Включить CORS на JSON API Wordpress
У меня есть этот сайт wordpress с плагином под названием JSON API. Этот плагин предоставляет формат JSON для контента, который находится в wordpress. Я смог включить CORS в wordpress, добавив заголовок ("Access-Control-Allow-Origin: *"); в заголовке php. Но когда я попробовал url, который предоставляет плагин JSON API, CORS больше не работает.
Это сайт wordpress, где я провожу тесты... Я использовал веб-сайт test cors, чтобы проверить, работает ли он и есть... http://kiwa-app.loading.net/
но когда я пытаюсь с url, который предоставляет мне JSON api, больше не работает. У меня все еще есть ошибка No 'Access-Control-Allow-Origin' http://kiwa-app.loading.net/?json=info
я оценю некоторую помощь спасибо!!!
5 ответов
хорошо, я, наконец, понял простой способ...
вам просто нужно добавить:
<? header("Access-Control-Allow-Origin: *"); ?>
в файле api.php, этот файл находится в wp-content / plugins/JSON-api/singletons / api.в PHP
Я надеюсь, что это помогает больше людей с той же проблемой!
я использовал несколько разных API WordPress , но для тех из вас, кто использует "официальный"WP-API, у меня было много проблем с этим CORS - - - и то, что я нашел, было что между .подход реврайт и несколько других, на которые я наткнулся... добавление этого в функции темы.php работал лучше всего.
function add_cors_http_header(){
header("Access-Control-Allow-Origin: *");
}
add_action('init','add_cors_http_header');
Не используйте никаких комбинаций этих ( .htaccess или заголовка.php, api.функция PHP.php) как он будет на вас злиться.
перед отправкой ответа в браузер мы можем запустить два крюка действий и вставить новый header()
:
do_action("json_api", $controller, $method);
do_action("json_api-{$controller}-$method");
первый работает на каждом методе, а второй-для целевых конкретных методов. Вот реализация первого, с прокомментированным способом найти второй:
add_action( 'json_api', function( $controller, $method )
{
# DEBUG
// wp_die( "To target only this method use <pre><code>add_action('$controller-$method', function(){ /*YOUR-STUFF*/ });</code></pre>" );
header( "Access-Control-Allow-Origin: *" );
}, 10, 2 );
в плагинах wordpress goto > JSON API > редактировать
из правой руки выбор файла выберите
в JSON-API-интерфейс/одиночек/API-интерфейса.в PHP
вам нужно будет добавить следующую строку
заголовок ("Access-Control-Allow-Origin: *");
ваш код должен выглядеть так же, как это было сделано. добавление этой строки в любом другом месте может работать не так, как ожидалось.
<?php
header("Access-Control-Allow-Origin: *");
class JSON_API {
function __construct() {
$this->query = new JSON_API_Query();
$this->introspector = new JSON_API_Introspector();
$this->response = new JSON_API_Response();
add_action('template_redirect', array(&$this, 'template_redirect'));
add_action('admin_menu', array(&$this, 'admin_menu'));
add_action('update_option_json_api_base', array(&$this, 'flush_rewrite_rules'));
add_action('pre_update_option_json_api_controllers', array(&$this, 'update_controllers'));
}
function template_redirect() {
для тех, кто имеет эту проблему с множественные истоки
на сервере, на котором размещен ваш сайт wordpress, перейдите к ../ wp-content / plugins / JSON-rest-api и отсюда откройте плагин.PHP-файл.
В этой функции
function json_send_cors_headers( $value ) {..}
изменить заголовок
header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );
до
header( 'Access-Control-Allow-Origin: *' );
надеюсь, это поможет всем, кто сталкивается с теми же проблемами, что и я.