サイトオプションを設定するために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']がnullであるため、これが常に失敗してWP_Errorを返すことです。
Var_dump($ request)を実行すると、オブジェクトの['body']部分にJSON文字列が表示されますが、配列のその部分を呼び出してもアクセスできません。私はまた、ドキュメント( http://v2.wp-api.org/extending/adding/ )に記載されているパラメータを取得するためのメソッドを使用してみましたが、どちらもデータを返さないようです。本当に基本的なものがここにないのですか。
あなたは$request->get_body()
を使うことができます
Key => valuesの配列を返す$request->get_json_params()
を使うことができます。
これらの条件で(おそらくもう少し):
Content-Type: application/json
があります。{"option":"siteColor","value":"ff0000"}
のような生の体があります。https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/ /
前の答えで は カスタムエンドポイントのデータにアクセスできました using
$parameters = $request->get_query_params();
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();
}