Bagaimana cara mengakses isi permintaan WP API dalam rute khusus?

11

Saya telah membuat rute khusus di WP API (v2 beta 4) untuk menetapkan opsi situs. Saya menggunakan AngularJS untuk melakukan panggilan API, dan untuk beberapa alasan, saya tidak dapat mengakses data yang dikirim dalam permintaan. Inilah yang saya miliki sejauh ini:

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

    }

}]);

Ini berhasil mengirim permintaan dan data yang diposting terlihat seperti ini:

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

Permintaan berhasil sampai ke rute kustom saya dan ke panggilan balik yang telah saya tentukan. Inilah fungsi callback di dalam kelas:

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

}

Masalahnya adalah ini selalu gagal dan mengembalikan WP_Error karena $ request ['option'] adalah nol.

Ketika saya var_dump ($ request), saya melihat string JSON di bagian ['body'] objek, tetapi itu tidak akan membiarkan saya mengaksesnya saat memanggil bagian array itu. Saya juga telah mencoba menggunakan metode untuk mengambil parameter yang dicatat dalam dokumentasi ( http://v2.wp-api.org/extending/adding/ ), tetapi tidak satupun yang sepertinya mengembalikan data juga. Apakah saya melewatkan sesuatu yang sangat mendasar di sini?

Ryan Hale
sumber
beruntung dengan ini?
jgraup

Jawaban:

6

Dalam jawaban sebelumnya dapat mengakses data di titik akhir kustom menggunakan

$parameters = $request->get_query_params(); 

Periksa params kueri untuk 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();
}
jgraup
sumber
5

Kamu bisa menggunakan $request->get_body()

Gerardlamo
sumber