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" } ]
