Làm cách nào để tôi truy cập vào phần thân của yêu cầu API WP trong một tuyến tùy chỉnh?


11

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?


Bất kỳ may mắn với điều này?
jgraup

Câu trả lời:


6

Trong một câu trả lời trước đó là có thể truy cập dữ liệu trong một điểm cuối tùy chỉnh bằng cách sử dụng

$parameters = $request->get_query_params(); 

Kiểm tra thông số truy vấn cho 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();
}


5

Bạn có thể sử dụng $request->get_json_params()sẽ trả về một mảng các giá trị key =>.

Với những điều kiện này (có thể là một vài nữa):

  1. Máy khách gửi yêu cầu có Content-Type: application/jsontrong tiêu đề
  2. Có một cơ thể như thế {"option":"siteColor","value":"ff0000"}.

https://developer.wordpress.org/reference/groupes/wp_rest_Vquest/get_json_params/


Điều này thật đúng với gì mà tôi đã tìm kiếm. Cảm ơn!
Jason Ellis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.