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?
Jawaban:
Dalam jawaban sebelumnya dapat mengakses data di titik akhir kustom menggunakan
Periksa params kueri untuk
option
sumber
Kamu bisa menggunakan
$request->get_body()
sumber
Anda dapat menggunakan
$request->get_json_params()
yang akan mengembalikan array nilai key =>.Dengan kondisi ini (mungkin beberapa lagi):
Content-Type: application/json
di header{"option":"siteColor","value":"ff0000"}
.https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/
sumber