wake-up-neo.com

Aktivieren Sie CORS für JSON API Wordpress

Ich habe diese Wordpress-Site mit einem Plugin namens JSON-API. Dieses Plugin stellt ein JSON-Format für den Inhalt bereit, der sich in WordPress befindet. Ich konnte CORS in WordPress durch Hinzufügen eines Headers aktivieren ("Access-Control-Allow-Origin: *"); auf dem PHP-Header. Wenn ich jedoch die URL ausprobierte, die das JSON-API-Plugin bereitstellt, funktioniert CORS nicht mehr.

Dies ist die WordPress-Site, an der ich die Tests durchführe ... Ich habe die Testcors-Website verwendet, um zu überprüfen, ob sie funktioniert hat und es ist ... Http: //kiwa-app.loading .Netz/

Aber wenn ich mit der URL versuche, die mir die JSON-API zur Verfügung stellt, funktioniert das nicht mehr. Ich habe immer noch den Fehler No 'Access-Control-Allow-Origin' Http://kiwa-app.loading.net/?json=info

Ich werde mich dankbar dafür bedanken !!!

12

Ok, ich fand endlich einen einfachen Weg ... 

Sie müssen nur hinzufügen: 

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

In der Datei api.php befindet sich diese Datei in wp-content/plugins/json-api/singletons/api.php

Ich hoffe es hilft mehr Menschen mit dem gleichen Problem!

15

Ich habe ein paar verschiedene WordPress-APIs verwendet - aber für diejenigen, die die "offizielle" WP-API verwenden, hatte ich große Probleme mit diesem CORS --- und was ich fand, war das zwischen den beiden. htaccess approach und ein paar andere, über die ich gestolpert bin ... das Hinzufügen zu Ihrem Theme functions.php hat am besten funktioniert.

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

Stellen Sie sicher, dass Sie keine Kombinationen davon verwenden (.htaccess, header.php, api.php, functions.php), da dies auf Sie wütend wird.

17
sheriffderek

Bevor die Antwort an den Browser gesendet wird, können wir zwei Action-Hooks ausführen und eine neue header() einfügen:

do_action("json_api", $controller, $method);
do_action("json_api-{$controller}-$method");

Die erste Methode läuft auf jeder Methode und die zweite Methode ist auf bestimmte Methoden ausgerichtet. Hier ist eine Implementierung der ersten, mit einer kommentierten Möglichkeit, die zweite zu finden:

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

In WordPress gehen Sie zu Plugins> JSON-API> Bearbeiten

Wählen Sie aus der rechten Dateiauswahl  

json-api/singletons/api.php

Sie müssen die folgende Zeile hinzufügen  

header ("Zugriffskontrolle - Zulassen - Ursprung: *");

Ihr Code sollte dem einmal ähnlich aussehen. Das Hinzufügen dieser Zeile an einer anderen Stelle funktioniert möglicherweise nicht wie erwartet.

<?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

Nachdem die REST API mit dem Core zusammengeführt wurde, können wir das rest_api_init Aktion.

add_action( 'rest_api_init', function()
{
    header( "Access-Control-Allow-Origin: *" );
} );
1
Sudar

WordPress 5 (4.4+) kann es über WP Header verarbeiten:

Versuche dies:

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_Origin' ];
    return $headers;
}

Beachten Sie, dass dies den Zugriff von JEDER Quelle ermöglicht. Aus Sicherheitsgründen sollten Sie versuchen, ein Array von zulässigen Domänen festzulegen, mit denen die Anforderung an Ihre WordPress - Site gesendet werden kann, und das Zulassungs-CORS kurzschließen, wenn die anfragende Domäne nicht in der Liste der zulässigen Domänen enthalten ist:

add_filter( 'wp_headers', 'send_cors_headers', 11, 1 );
function send_cors_headers( $headers ) {
    $allowed_domains = array( 'https://my.okdomain.com' , 'http://anothergoodone.com');
    if ( ! in_array( $_SERVER[ 'HTTP_Origin' ] , $allowed_domains ) ) return $headers;
    $headers['Access-Control-Allow-Origin'] = $_SERVER[ 'HTTP_Origin' ];
    return $headers;
}
1
Lance Cleveland

Gehen Sie in WordPress-Projekt zur folgenden Datei und machen Sie es so

In we-includes/rest-api.php ändern Sie header( 'Access-Control-Allow-Origin: ' . $Origin ); in header( 'Access-Control-Allow-Origin: *');.
In we-includes/http.php ändern Sie header( 'Access-Control-Allow-Origin: ' . $Origin ); in header( 'Access-Control-Allow-Origin: *');.

0
gui xiao

Für alle, die dieses Problem mit mehreren Ursprüngen haben

Navigieren Sie auf Ihrem Server, auf dem sich Ihre Wordpress-Site befindet, zu ../wp-content/plugins/json-rest-api und öffnen Sie die Datei plugin.php.

In dieser Funktion 

function json_send_cors_headers( $value ) {..}

Ändern Sie den Header 

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

Zu

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

Ich hoffe, das hilft jedem, der die gleichen Probleme hatte wie ich.

0
njsokol

Unter Verwendung von Wordpress 5.2.3 - während GET und POST extern verwendet wurden, öffnete sich für mich schließlich Sesam. Ich habe alle obigen Antworten ausprobiert (ohne Erfolg) ), bevor ich diese Lösung fand, die in meinem Fall funktioniert hat.

add_action( 'rest_api_init', function () {
    add_action( 'rest_pre_serve_request', function () {
        header( 'Access-Control-Allow-Headers: Authorization, Content-Type, X-WP-Wpml-Language', true );
        header("Access-Control-Allow-Origin: *");
    } );
}, 15 );

Hoffentlich hat WordPress in Zukunft eine offizielle Doggy-Türklappe für die CORS-Kontrolle.

0
Grant