WP REST APIで新規エンドポイント(カスタムJSONデータ)を作成する
WP REST APIで新規にエンドポイントを作成する方法です。
既存のJSONデータでも十分なケースが多いのですが、不要なデータが多かったり、複数のJSONを読み込む必要がある場合はフルスクラッチで1つのデータを作成する方が扱いやすい&動作も早いのではないかと思います。
デフォルトで用意されているデータを取得する場合はこちらの投稿をチェックしてみてください
functions.phpでエンドポイントを登録する
① 第1引数 | 名前空間/バージョン。例えばテーマ名+V1(バージョン1)等。大きく更新した場合はV2に変更する等。 デフォルトエンドポイント“/wp-json/wp/v2/posts”の”/wp/v2/”に相当する部分です。 |
② 第2引数 | ベースURL。エンドポイントのURL末尾になります。 デフォルトエンドポイント“/wp-json/wp/v2/posts”の”posts”に相当する部分です。 |
③ 第3引数 | オプション。
“methods”・・・データを”read(load)”で利用する場合は”WP_REST_SERVER::READABLE”を設定します。 “GET”でも良いですが”WP_REST_SERVER::READABLE”の方が恐らくどのブラウザにも対応しているっぽいです。(知らんけど) “callback”・・・ここに指定した関数で必要なデータを取得します。 |
“register_rest_route”で設定した名前空間+ベースURLでアクセスできるようになります。
エンドポイント
http://example.com/wp-json/mytheme/v1/myroute
自動でJSON形式にしてくれる!
なんともありがたいことにコールバックで設定した値は自動でJSON形式に変換してくれるのですよ。
試しに下記を設定をしてみてください。
functions.php
function myResults() {
return array(
'りんご' => '赤い',
'桃' => 'ピンク',
'バナナ' => '黄色'
);
}
URLにアクセスするとPHP側で設定した連想配列が、JSON形式に変換されているのが確認できるかと思います。
追加したエンドポイントのJSONデータ
{
"りんご": "赤い",
"桃": "ピンク",
"バナナ": "黄色"
}
最新3件の投稿と固定ページのタイトル、概要、パーマリンク、画像URLを取得する例
投稿と固定ページ合わせて3件です。
//エンドポイントを登録
function my_custom_rest_route() {
//第1引数:名前空間 第2:URLの末尾 第3:エンドポイントのオプション
register_rest_route('mytheme/v1', 'myroute', array(
'methods' => WP_REST_SERVER::READABLE, //GET
'callback' => 'my_results'
));
}
add_action('rest_api_init', 'my_custom_rest_route');
//コールバック
function my_results() {
$my_query = new WP_Query(array(
'post_type' => array('post','page'),
'posts_per_page' => 3
));
$my_query_results = array();
while($my_query->have_posts()) {
$my_query->the_post();
array_push($my_query_results, array(
'title' => get_the_title(),
'excerpt' => get_the_excerpt(),
'permalink' => get_the_permalink(),
'thumbnail' => get_the_post_thumbnail_url(0, 'full')
));
}
return $my_query_results;
}
[
{
"title": "WP REST APIで新規エンドポイント(カスタムJSONデータ)を作成する",
"excerpt": "WP REST APIで新規にエンドポイントを作成する方法です。",
"permalink": "http://example.com/wp-rest-api-custom/",
"thumbnail": "http://example.com/wp-content/uploads/2019/09/xxx.png"
},
{
"title": "$.getJSONで取得した複数のJSONデータを結合する【jQuery+ES6】",
"excerpt": "複数のJSONデータをマージするにはまず、$.when().then()を使用して$.when()・・・JSO […]",
"permalink": "http://example.com/getjson/",
"thumbnail": "http://example.com/wp-content/uploads/2019/09/xxx.png"
},
{
"title": "WordPressでPHPに設定した値をwp_localize_scriptでJavaScriptに渡す",
"excerpt": "wp_localize_script関数でWordPressのテンプレートタグをはじめ、任意の値をPHPからJavaScriptに渡してあげることができますよ!",
"permalink": "http://example.com/wp-localize-script/",
"thumbnail": "http://example.com/wp-content/uploads/2019/09/xxx.png"
}
]