2014-09-06 14 views
10

Ho questo sito wordpress con un plugin chiamato JSON API. Questo plugin fornisce un formato JSON per il contenuto che si trova nel wordpress. Sono stato in grado di abilitare CORS sul wordpress aggiungendo header ("Access-Control-Allow-Origin: *"); sull'intestazione php. Ma quando ho provato l'url che il plugin API JSON fornisce il CORS non funziona più.Abilita CORS su API JSON Wordpress

Questo è il sito wordpress sono stati sto facendo le prove ... Ho usato il sito cors di prova per controllare se stava funzionando ed è ... http://kiwa-app.loading.net/

Ma quando provo con l'url che l'API di JSON mi fornisce, non funziona più. Ho ancora l'errore No 'Access-Control-Allow-Origin' http://kiwa-app.loading.net/?json=info

Gradirò un po 'di aiuto grazie !!!

risposta

14

Ok ho finalmente capito un modo semplice ...

Non vi resta che aggiungere:

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

Sul file api.php, questo file si trova in wp-content/plugins/json-api/singletons/api.php

Spero che aiuti più persone con lo stesso problema!

+0

Per qualcuno confuso come me, aggiungilo come la prima riga prima di ' spetz

+2

Non dovrebbe essere la modifica dei file principali, l'utilizzo di un filtro è migliore. –

7

Prima che la risposta viene inviata al browser, siamo in grado di eseguire two action hooks e inserire una nuova header():

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

Il primo viene eseguito su ogni metodo, e il secondo è quello di colpire i metodi specifici. Ecco un'implementazione del primo, con un modo commentato per trovare la seconda:

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); 
+0

Le azioni per il plugin json-rest-api sono: json_insert_post, json_insert_user, json_query_navigation_headers, wp_json_server_before_serve – adosaiguas

8

Ho usato un paio di WordPress diverso API - ma per quelli di voi che usano il 'ufficiale' WP-API, ho avuto molti problemi con questo CORS --- e quello che ho trovato era che tra l'approccio .htaccess e alcuni altri mi sono imbattuto in ... aggiungendo questo al tuo function functions.php ha funzionato meglio.

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

Assicurarsi di non utilizzare qualsiasi combinazione di questi (.htaccess, header.php, api.php, functions.php) come sarà arrabbiato con te.

+0

Questo ha funzionato per la v1, ma mi sono appena imbattuto in questo - e non ho ancora avuto fortuna con la v2. – sheriffderek

+0

Funziona con l'API V2 di Wordpress. La migliore soluzione che ho trovato. – Hinrich

2

a Goto wordpress plugin> JSON API> Modifica

Dalla selezione dei file a destra selezionare

JSON-api/single/api.php

Sarà necessario aggiungere il riga successiva

intestazione ("Access-Control-Allow-Origin: *");

Il codice dovrebbe essere simile a questo una volta fatto. L'aggiunta di questa riga in qualsiasi altro punto potrebbe non funzionare come previsto.

<?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() { 
0

Per chi sta avendo questo problema con origini multiple

nel server che ospita il sito wordpress, individuare ../wp-content/plugins/json-rest-api e da qui apri il file plugin.php.

In questa funzione

function json_send_cors_headers($value) {..} 

modificare l'intestazione

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

Per

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

Spero che questo aiuti qualcuno che stava subendo gli stessi problemi I.