Tôi đã tạo một tuyến tùy chỉnh trong WP API (v2 beta 4) để đặt tùy chọn trang web. Tôi đang sử dụng AngularJS để thực hiện cuộc gọi API và vì một số lý do, tôi không thể truy cập dữ liệu được gửi trong yêu cầu. Đây là những gì tôi có cho đến nay:
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
}
})
}
}]);
Điều này gửi thành công yêu cầu và dữ liệu được đăng trông giống như thế này:
{"option":"siteColor","value":"ff0000"}
Yêu cầu thành công thực hiện theo lộ trình tùy chỉnh của tôi và gọi lại mà tôi đã chỉ định. Đây là chức năng gọi lại trong lớp:
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 ) );
}
}
Vấn đề là điều này luôn thất bại và trả về WP_Error vì $ request ['tùy chọn'] là null.
Khi tôi var_dump ($ request), tôi thấy chuỗi JSON trong phần ['body'] của đối tượng, nhưng nó sẽ không cho phép tôi truy cập vào phần đó khi gọi phần đó của mảng. Tôi cũng đã thử sử dụng các phương thức để truy xuất các tham số được ghi chú trong tài liệu ( http://v2.wp-api.org/extending/adding/ ), nhưng không ai trong số chúng dường như trả về dữ liệu. Tôi có thiếu một cái gì đó thực sự cơ bản ở đây?