Ich habe eine benutzerdefinierte Route in der WP-API (v2 Beta 4) erstellt, um eine Site-Option festzulegen. Ich verwende AngularJS, um den API-Aufruf durchzuführen, und aus irgendeinem Grund kann ich nicht auf die innerhalb der Anforderung gesendeten Daten zugreifen. Folgendes habe ich bisher:
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
}
})
}
}]);
Dadurch wird die Anfrage erfolgreich gesendet und die veröffentlichten Daten sehen ungefähr so aus:
{"option":"siteColor","value":"ff0000"}
Die Anfrage gelangt erfolgreich zu meiner benutzerdefinierten Route und zu dem von mir angegebenen Rückruf. Hier ist diese Rückruffunktion innerhalb der Klasse:
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 ) );
}
}
Das Problem ist, dass dies immer fehlschlägt und den WP_Error zurückgibt, da $ request ['option'] null ist.
Wenn ich var_dump ($ request) verwende, wird die JSON-Zeichenfolge im Abschnitt ['body'] des Objekts angezeigt, aber ich kann nicht darauf zugreifen, wenn ich diesen Teil des Arrays aufrufe. Ich habe auch versucht, die in der Dokumentation ( http://v2.wp-api.org/extending/adding/ ) angegebenen Methoden zum Abrufen von Parametern zu verwenden , aber keine davon scheint die Daten zurückzugeben. Vermisse ich hier etwas wirklich Grundlegendes?
Antworten:
In einer früheren Antwort konnte auf die Daten in einem benutzerdefinierten Endpunkt mit zugegriffen werden
Überprüfen Sie die Abfrageparameter auf
option
quelle
Sie können verwenden
$request->get_body()
quelle
Sie können verwenden,
$request->get_json_params()
was ein Array von Schlüssel => Werten zurückgibt.Mit diesen Bedingungen (möglicherweise ein paar mehr):
Content-Type: application/json
im Header{"option":"siteColor","value":"ff0000"}
.https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/
quelle