あくまで自分用の覚え書きなので文章とか適当です...

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"
  }
]
スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です