Я создал собственный маршрут в WP API (v2 beta 4), чтобы установить опцию сайта. Я использую AngularJS для вызова API, и по какой-то причине я не могу получить доступ к данным, отправленным в запросе. Вот что у меня так далеко:
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
}
})
}
}]);
Это успешно отправляет запрос, и опубликованные данные выглядят примерно так:
{"option":"siteColor","value":"ff0000"}
Запрос успешно переходит к моему пользовательскому маршруту и к обратному вызову, который я указал. Вот эта функция обратного вызова внутри класса:
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 ) );
}
}
Проблема в том, что это всегда дает сбой и возвращает ошибку WP_Error, потому что $ request ['option'] имеет значение null.
Когда я var_dump ($ request), я вижу строку JSON в части ['body'] объекта, но она не позволяет мне получить доступ к ней при вызове этой части массива. Я также пытался использовать методы для получения параметров, отмеченных в документации ( http://v2.wp-api.org/extending/adding/ ), но ни один из них, похоже, тоже не возвращает данные. Я что-то здесь упускаю?
Ответы:
В предыдущем ответе можно было получить доступ к данным в пользовательской конечной точке с помощью
Проверьте параметры запроса для
option
источник
Ты можешь использовать
$request->get_body()
источник
Вы можете использовать
$request->get_json_params()
который будет возвращать массив значений ключа =>.С этими условиями (возможно, еще несколько):
Content-Type: application/json
в заголовке{"option":"siteColor","value":"ff0000"}
.https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/
источник