如何在自定义路由中访问WP API请求的正文?

时间:2015-11-18 作者:Ryan Hale

我已经在WP API(v2 beta 4)中创建了一个自定义路由来设置站点选项。我使用AngularJS进行API调用,由于某种原因,我无法访问请求中发送的数据。以下是我目前掌握的情况:

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

    }

}]);
这将成功发送请求,发布的数据如下所示:

{"option":"siteColor","value":"ff0000"}
请求成功地发送到我的自定义路由和我指定的回调。下面是类中的回调函数:

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

}
问题是,由于$request[\'option\']为空,此操作总是失败并返回WP\\u错误。

当我var\\u dump($request)时,我在对象的[\'body\']部分看到JSON字符串,但它不允许我在调用数组的该部分时访问该字符串。我还尝试使用文档中记录的检索参数的方法(http://v2.wp-api.org/extending/adding/), 但这些似乎都没有返回数据。我是不是错过了一些基本的东西?

3 个回复
SO网友:jgraup

在a中previous answer 能够访问custom endpoint 使用

$parameters = $request->get_query_params(); 
检查查询参数option

$parameters[\'option\']
获取请求正文的两个选项:

$body = $request->get_body();

$body_params = $request->get_body_params();

示例

<?php
function my_awesome_func( WP_REST_Request $request ) {

    // Two ways to get the body from the request.
    $body = $request->get_body();
    $body_params = $request->get_body_params();

    // 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_default_params();

    // Uploads aren\'t merged in, but can be accessed separately:
    $parameters = $request->get_file_params();
}

SO网友:mkly

您可以使用$request->get_json_params() 它将返回一个键=>值数组。

在这些条件下(可能更多):

发送请求的客户端Content-Type: application/json 在标题中,有一个原始主体,如{"option":"siteColor","value":"ff0000"}.

https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/

SO网友:Gerardlamo

You can use $request->get_body()

相关推荐

通过WP-API输出HTML元素

我正在使用WP-API创建一个JavaScript应用程序,我正在使用http请求从WordPress数据库中提取内容。对于一个普通的帖子,我并没有得到我所期望的所有元素数据。我将以下文本放入可视化编辑器中。侦探们正在调查一起可怕的谋杀案,据称凶手试图吃掉一名女子。据悉,这名22岁的女子在南威尔士一家无家可归者招待所发生的令人震惊的事件中被咬伤,面部严重受伤。但该旅店的一些邻居也声称,警方向袭击者发射泰瑟枪后,袭击者嫌疑人死亡,这名女子实施了食人行为。格温特警方拒绝对这些指控发表评论。然而,一位了解调查情