it-swarm.com.ru

Включить 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, он больше не работает. У меня все еще есть ошибка Нет 'Access-Control-Allow-Origin' http://kiwa-app.loading.net/?json=info

Я буду признателен за помощь, спасибо!

12
Mario Sanchez Maselli

Хорошо, я наконец-то понял, легкий путь ... 

Вам просто нужно добавить: 

     <? header("Access-Control-Allow-Origin: *"); ?>

В файле api.php этот файл находится в wp-content/plugins/json-api/singletons/api.php

Я надеюсь, что это поможет большему количеству людей с той же проблемой!

15
Mario Sanchez Maselli

Я использовал несколько различных API WordPress - но для тех из вас, кто использует «официальный» WP-API , у меня были большие проблемы с этим CORS - и я обнаружил, что это между .htaccess подхода и некоторых других, с которыми я столкнулся ... добавив это в вашу тему functions.php работал лучше всего.

function add_cors_http_header(){
    header("Access-Control-Allow-Origin: *");
}
add_action('init','add_cors_http_header');

Не используйте любые их комбинации (.htaccess, header.php, api.php, functions.php), так как это будет на вас злиться.

17
sheriffderek

Перед отправкой ответа в браузер мы можем запустить два хука действий и вставить новую 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 );
7
brasofilo

В 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() {
2
Basil Abbas

В проекте WordPress перейдите к следующему файлу и сделайте так

В we-includes/rest-api.php измените header( 'Access-Control-Allow-Origin: ' . $Origin ); на header( 'Access-Control-Allow-Origin: *');.
В we-includes/http.php измените header( 'Access-Control-Allow-Origin: ' . $Origin ); на header( 'Access-Control-Allow-Origin: *');.

0
gui xiao

Для тех, кто имеет эту проблему с несколько источников

На вашем сервере, на котором размещен ваш WordPress сайт, перейдите к ../wp-content/plugins/json-rest-api и отсюда откройте файл plugin.php.

В этой функции 

function json_send_cors_headers( $value ) {..}

Изменить заголовок 

header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $Origin ) );

К

header( 'Access-Control-Allow-Origin: *' );

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

0
njsokol