web-dev-qa-db-fra.com

Activer CORS sur l'API JSON Wordpress

J'ai ce site wordpress avec un plugin appelé API JSON. Ce plugin fournit un format JSON pour le contenu qui se trouve dans wordpress. J'ai pu activer CORS sur wordpress en ajoutant un en-tête ("Access-Control-Allow-Origin: *"); sur l'en-tête php. Mais quand j'ai essayé l'URL fournie par le plugin JSON API, le CORS ne fonctionne plus.

C’est le site wordpress où j’ai fait les tests ... J’ai utilisé le site Web de test cors pour vérifier s’il fonctionnait bien et c’est ... http: //kiwa-app.loading. net/

Mais lorsque j'essaie avec l'URL fournie par l'API JSON, ne fonctionne plus. J'ai toujours le message d'erreur 'Access-Control-Allow-Origin' http://kiwa-app.loading.net/?json=info

Je vais aprécier de l'aide merci !!!

12

Ok j'ai enfin compris un moyen facile ... 

Vous devez juste ajouter: 

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

Sur le fichier api.php, ce fichier se trouve dans wp-content/plugins/json-api/singletons/api.php.

J'espère que cela aide plus de gens avec le même problème!

15

J'ai utilisé quelques API WordPress différentes - mais pour ceux d'entre vous qui utilisez le "officiel" WP-API , j'ai eu beaucoup de problèmes avec ce CORS --- et ce que j'ai trouvé était entre les. approche htaccess et quelques autres je suis tombé sur ... ajouter cela à votre thème functions.php a fonctionné mieux.

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

Assurez-vous de ne pas utiliser ces combinaisons (.htaccess, header.php, api.php, functions.php), car cela vous mettra en colère.

17
sheriffderek

Avant que la réponse ne soit envoyée au navigateur, nous pouvons exécuter deux crochets d'action et insérer un nouveau header():

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

La première s'exécute sur toutes les méthodes et la seconde consiste à cibler des méthodes spécifiques. Voici une implémentation de la première, avec un moyen commenté de trouver la seconde:

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

Dans les plugins wordpress goto> API JSON> Modifier

Dans la sélection de fichier de droite, sélectionnez  

json-api/singletons/api.php

Vous devrez ajouter la ligne suivante  

en-tête ("Access-Control-Allow-Origin: *");

Votre code devrait ressembler à ceci une fois terminé. L'ajout de cette ligne n'importe où ailleurs pourrait ne pas fonctionner comme prévu.

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

Dans le projet wordpress, allez dans le fichier suivant et faites comme ça

Dans we-includes/rest-api.php, changez header( 'Access-Control-Allow-Origin: ' . $Origin ); en header( 'Access-Control-Allow-Origin: *');.
Dans we-includes/http.php, remplacez header( 'Access-Control-Allow-Origin: ' . $Origin ); par header( 'Access-Control-Allow-Origin: *');.

0
gui xiao

Pour tous ceux qui ont ce problème avec plusieurs origines

Sur votre serveur hébergeant votre site wordpress, accédez à la page ../wp-content/plugins/json-rest-api et ouvrez le fichier plugin.php.

Dans cette fonction 

function json_send_cors_headers( $value ) {..}

Changer l'en-tête 

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

À

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

J'espère que cela aide tous ceux qui ont les mêmes problèmes que moi.

0
njsokol