J'ai créé un itinéraire personnalisé dans WP API (v2 beta 4) pour définir une option de site. J'utilise AngularJS pour effectuer l'appel API, et pour une raison quelconque, je ne suis pas en mesure d'accéder aux données envoyées dans la demande. Voici ce que j'ai jusqu'à présent:
gvl.service('gvlOptionService', ['$http', function($http) {
this.updateOption = function(option, value) {
return $http({
method : 'POST',
url : wpAPIdata.gvlapi_base + 'options',
data : { "option" : option,
"value" : value
},
headers : { 'Content-Type': 'application/x-www-form-urlencoded',
'X-WP-Nonce' : wpAPIdata.api_nonce
}
})
}
}]);
Cela envoie avec succès la demande et les données publiées ressemblent à ceci:
{"option":"siteColor","value":"ff0000"}
La demande parvient avec succès à mon itinéraire personnalisé et au rappel que j'ai spécifié. Voici cette fonction de rappel au sein de la classe:
public function update_option( WP_REST_Request $request ) {
if(isset($request['option']) && $request['option'] == 'siteColor') {
$request_prepared = $this->prepare_item_for_database($request);
$color_updated = update_option('site_color', $request_prepared['value'], false);
if($color_updated) {
$response = $this->prepare_item_for_response('site_color');
$response->set_status( 201 );
$response->header('Location', rest_url('/gvl/v1/options'));
return $response;
} else {
// ...
}
} else {
return new WP_Error( 'cant_update_option', __( 'Cannot update option.' ), array( 'status' => 400 ) );
}
}
Le problème est que cela échoue toujours et renvoie la WP_Error car $ request ['option'] est null.
Lorsque je var_dump ($ request), je vois la chaîne JSON dans la partie ['body'] de l'objet, mais cela ne me permet pas d'y accéder lors de l'appel de cette partie du tableau. J'ai également essayé d'utiliser les méthodes de récupération des paramètres notées dans la documentation ( http://v2.wp-api.org/extending/adding/ ), mais aucune ne semble renvoyer les données non plus. Suis-je en train de manquer quelque chose de vraiment basique ici?
Réponses:
Dans une réponse précédente, a pu accéder aux données dans un point de terminaison personnalisé à l' aide
Vérifiez les paramètres de requête pour
option
la source
Vous pouvez utiliser
$request->get_body()
la source
Vous pouvez utiliser
$request->get_json_params()
qui renverra un tableau de valeurs key =>.Avec ces conditions (éventuellement quelques autres):
Content-Type: application/json
dans l'en-tête{"option":"siteColor","value":"ff0000"}
.https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/
la source