公式が用意したもので大方のことが出来る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デザイナー養成講座