デイトラモダン開発編 DAY26 WordPressのREAT APIを活用して「お知らせ一覧」ページと紐付けよう

2つのURLの違い

「IDだけ返ってくる」か「中身(画像URLなど)まで全部セットで返ってくる」かの違いです。

  1. パラメータなし:https://test.com/wp-json/wp/v2/posts/
  2. パラメータあり:https://test.com/wp-json/wp/v2/posts/?_embed

1. …/posts/ (パラメータなし)

「軽量版」 です。関連するデータはすべて ID番号 だけで返ってきます。

  • アイキャッチ画像: featured_media: 12 (IDが12番ということしか分からない)
  • カテゴリー: categories: [3, 5] (IDが3番と5番ということしか分からない)

これだけだと、画像のURLやカテゴリ名を表示するために、IDを使ってまた別のAPIを叩きにいかなければならず、非常に面倒です。

2. …/posts/?_embed (パラメータあり)

「全部入り版」 です。IDで紐付いているデータを、_embedded という箱の中に「埋め込んで(embed)」 まとめて返してくれます。

  • アイキャッチ画像: _embedded の中に 実際の画像URL が入ってくる
  • カテゴリー: _embedded の中に 実際のカテゴリ名 が入ってくる

図解イメージ

// パラメータなし (.../posts/)
{
  "id": 1,
  "title": "こんにちは",
  "featured_media": 123,  // <--- IDしかわからない!画像が表示できない!
}

// パラメータあり (.../posts/?_embed)
{
  "id": 1,
  "title": "こんにちは",
  "featured_media": 123,
  "_embedded": {          // <--- ここに詳細データが追加される!
    "wp:featuredmedia": [
      {
        "id": 123,
        "source_url": "https://test.com/image.jpg" // <--- URLがわかる!
      }
    ]
  }
}

ニュース一覧ページのように、「記事と一緒に画像やカテゴリ名も表示したい」という場合は、1回のリクエストで全部取れる ?_embed を使うのが定石です。

タイトルとURLをコピーしました