公式が用意したもので大方のことが出来るWP REST APIですが、時々「取得する情報をカスタマイズ出来たらなー」と思うことがあります。
今回はfunction.phpへの記述でオリジナルのREST APIを作る方法を簡単に説明してみようかと思います。
ちなみにこちらの記事をとても参考にさせて頂きました。
register_rest_routeで呼び出すAPIを追加する
何か小難しいことが必要なのかなと思いましたが、調べてみるとregister_rest_routeを用いる事でさくっと自作APIを作る事が出来ました。
1 2 3 4 5 6 7 8 9 | 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で叩くことになります。
1 | https://個別のサイト/wp-json/custom_api/v1/all_posts |
次は上記のURLを叩いた際に表示させる配列データを作るための関数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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なんかも作ると便利そうですよね。