WP REST APIに自作のエンドポイントを追加するやり方

公式が用意したもので大方のことが出来る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なんかも作ると便利そうですよね。

[改訂版]WordPress 仕事の現場でサッと使える! デザイン教科書[WordPress 5.x対応版] Webデザイナー養成講座