Come posso accedere al corpo di una richiesta API WP in un percorso personalizzato?


11

Ho creato un percorso personalizzato nell'API WP (v2 beta 4) per impostare un'opzione del sito. Sto utilizzando AngularJS per effettuare la chiamata API e, per qualche motivo, non sono in grado di accedere ai dati inviati all'interno della richiesta. Ecco quello che ho finora:

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
                    }  
         })

    }

}]);

Questo invia correttamente la richiesta e i dati pubblicati sono simili al seguente:

{"option":"siteColor","value":"ff0000"}

La richiesta arriva correttamente al mio percorso personalizzato e al callback che ho specificato. Ecco quella funzione di callback all'interno della 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 ) );
    }

}

Il problema è che ciò fallisce sempre e restituisce WP_Error perché $ request ['opzione'] è null.

Quando var_dump ($ request), vedo la stringa JSON nella parte ['body'] dell'oggetto, ma non mi consente di accedervi quando chiamo quella parte dell'array. Ho anche provato a utilizzare i metodi per recuperare i parametri indicati nella documentazione ( http://v2.wp-api.org/extending/adding/ ), ma nessuno di questi sembra restituire i dati. Mi sto perdendo qualcosa di veramente semplice qui?


qualche fortuna con questo?
jgraup,

Risposte:


6

In una risposta precedente è stato in grado di accedere ai dati in un endpoint personalizzato utilizzando

$parameters = $request->get_query_params(); 

Controllare i parametri della query per 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();
}


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.