Включить 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: *' );

надеюсь, это поможет всем, кто сталкивается с теми же проблемами, что и я.