Criei uma rota personalizada na API do WP (v2 beta 4) para definir uma opção de site. Estou usando o AngularJS para fazer a chamada da API e, por algum motivo, não consigo acessar os dados enviados dentro da solicitação. Aqui está o que eu tenho até agora:
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
}
})
}
}]);
Isso envia com êxito a solicitação e os dados publicados são mais ou menos assim:
{"option":"siteColor","value":"ff0000"}
A solicitação chega com êxito à minha rota personalizada e ao retorno de chamada que eu especifiquei. Aqui está essa função de retorno de chamada dentro da 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 ) );
}
}
O problema é que isso sempre falha e retorna o WP_Error porque $ request ['option'] é nulo.
Quando var_dump ($ request), vejo a string JSON na parte ['body'] do objeto, mas ela não me permite acessar isso ao chamar essa parte da matriz. Também tentei usar os métodos para recuperar parâmetros anotados na documentação ( http://v2.wp-api.org/extending/adding/ ), mas nenhum deles parece retornar os dados também. Estou perdendo algo realmente básico aqui?
Respostas:
Em uma resposta anterior, foi possível acessar os dados em um terminal personalizado usando
Verifique os parâmetros de consulta para
option
fonte
Você pode usar
$request->get_body()
fonte
Você pode usar o
$request->get_json_params()
que retornará uma matriz de key => values.Com estas condições (possivelmente mais algumas):
Content-Type: application/json
no cabeçalho{"option":"siteColor","value":"ff0000"}
.https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/
fonte