公式が用意したもので大方のことが出来るWP REST APIですが、時々「取得する情報をカスタマイズ出来たらなー」と思うことがあります。
今回はfunction.phpへの記述でオリジナルのREST APIを作る方法を簡単に説明してみようかと思います。
ちなみにこちらの記事をとても参考にさせて頂きました。
register_rest_routeで呼び出すAPIを追加する
何か小難しいことが必要なのかなと思いましたが、調べてみるとregister_rest_routeを用いる事でさくっと自作APIを作る事が出来ました。
function custom_api_get_data() { // 詳しくは公式リファレンスを参照ですが、ざっくりと解説すると // register_rest_route('カスタムAPI固有のセグメントを命名','呼び出すAPI名','オプション配列') register_rest_route( 'custom_api/v1', '/all_posts', array( 'methods' => 'GET', // methodsを指定 'callback' => 'custom_api_get_data_callback' // APIが呼び出された際にコールバックされるデータ出力 )); } add_action( 'rest_api_init', 'custom_api_get_data' );
公式リファレンスはこちらからご参照くださいませ。
ちなみに上記の設定はこんな感じのURLで叩くことになります。
https://個別のサイト/wp-json/custom_api/v1/all_posts
次は上記のURLを叩いた際に表示させる配列データを作るための関数です。
function custom_api_get_data_callback( $request ) { // APIで呼び出される配列を生成する。 $posts_data = array(); // 以下の記述では公式では出来ない”全ての記事情報の配列”を作成 // 配列の作り方は通常のWordPressの記述と同じなのでここからは必要に合わせて改変ください $posts = get_posts( array( 'posts_per_page' => -1 ) ); foreach( $posts as $post ) { $id = $post->ID; // ここで記事情報意外に好きなものを入れても良い $posts_data[] = (object) array( 'id' => $id, 'date' => $post->post_date, 'link' => get_permalink($id), 'slug' => $post->post_name, 'title' => $post->post_title, 'content' => $post->post_content, 'author' => $post->post_author, 'featured_media' => get_the_post_thumbnail_url($id), 'categories' => get_the_category($id), 'tags' => get_the_tags($id), 'custom_fields' => get_post_custom($id) ); } return $posts_data; }
このサンプルでは全件取得を紹介しましたが、何気に面倒なアイキャッチ画像のURLをさくっと出来るAPIなんかも作ると便利そうですよね。