Como acesso o corpo de uma solicitação de API do WP em uma rota personalizada?


11

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?


alguma sorte com isso?
jgraup

Respostas:


6

Em uma resposta anterior, foi possível acessar os dados em um terminal personalizado usando

$parameters = $request->get_query_params(); 

Verifique os parâmetros de consulta para option

$parameters['option']

<?php
function my_awesome_func( WP_REST_Request $request ) {
    // You can access parameters via direct array access on the object:
    $param = $request['some_param'];

    // Or via the helper method:
    $param = $request->get_param( 'some_param' );

    // You can get the combined, merged set of parameters:
    $parameters = $request->get_params();

    // The individual sets of parameters are also available, if needed:
    $parameters = $request->get_url_params();
    $parameters = $request->get_query_params();
    $parameters = $request->get_body_params();
    $parameters = $request->get_default_params();

    // Uploads aren't merged in, but can be accessed separately:
    $parameters = $request->get_file_params();
}


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.