今回はWordPressのREST APIにエンドポイントを追加する知見を手に入れたので備忘録をしておきます。昨今のNext.jsやNuxt.jsなどを用いたときに活用できます。
どんなURLを叩くとデータ取得ができるかを考えておく
まずは、どんなURLを叩くとデータが取得ができるかを考えておきましょう。
今回は下記のURLを叩く前提で記事を書いていきます。
http://xxxxxxxxxx.com/wp-json/masato/v2/aaa/[投稿ID]
functions.phpに記述する
// エンドポイントを追加する
add_action('rest_api_init', function () {
register_rest_route('masato/v2', '/aaa/(?P<id>\d+)', [
'methods' => 'GET',
'callback' => 'aaa_func',
'args' => [
'id' => [
'validate_callback' => function($id) {
return ( is_numeric($id) ) ? $id : false;
}
]
]
]);
});
// callbackに指定した関数
function aaa_func($data) {
$res = [
'id' => 1000,
'title' => 'タイトル情報を入れます!',
'data' => [
'status' => 200
]
];
$response = new WP_REST_Response($res);
$response->set_status(200);
return $response;
}
このコードを少しずつ見ていきます。
register_rest_route('masato/v2', '/aaa/(?P<id>\d+)', [
この行は叩く想定のURLを見ていただければイメージが付くはずです。
/masato/v2
と /aaa/投稿ID
という感じでURLを追加する感じです。
次に、 'callback' => 'aaa_func',
はその名の通り、このURLを叩いたときに処理を走らせる関数を指定します。
'validate_callback' => function($id) {
では、GETした値のバリデーションを行います。自分の好きな感じに条件を追加していきましょう。不正な値については return false;
とすることで不正な値が入力された場合にはWordPress側が自動的に404を返してくれるようになります。
バリデーションしたらちゃんと値をreturnしておきます。
function aaa_func($data) {
}
は、コールバック関数です。 $data['id']
で id の値が取得できます。
$response = new WP_REST_Response($res);
では、連想配列で作った $res
をJSONデータで返すような準備をしてくれます。
$response->set_status(200);
JSONデータのHTTPステータスコードを指定できます。
return $response;
結果を返してJSONを吐き出します。
めちゃくちゃ簡単!
WordPressのREST APIは簡単にエンドポイントを追加できます。
これまで固定ページなどで無理やりにJSONを吐き出していた方は、ぜひとも適切な形でデータ問い合わせをするようにしましょう!
※記事用にコードを書き直したので動かなかったらすみません...。