WordPress

WP APIで_embedと_fieldsをくみあわせるときは、_linksを使う

以前に_fieldsクエリと組み合わせて、WP APIレスポンスを最小限に抑える方法を紹介した。今回は、_embedクエリを使って情報をフィルターする方法について説明した。_embedクエリを使用すると、関連情報も取得できるが、特定の情報を抽出したい場合は_fieldsで指定が必要。_embedと_fieldsを組み合わせる際は、書き方に注意が必要。サンプルでは、authorの情報を埋め込みつつ、取得内容を絞っている。

広告ここから
広告ここまで

以前_fieldsクエリを使って、WP APIのレスポンスを必要最低限にする方法を紹介しました。今回はその続編で、_embedクエリで取得できる情報についてもフィルターする方法を紹介します。

_embedクエリを使って、関連情報を取得する

WP APIで取得できる情報は、原則として「そのリソースPostTypeのデータ」だけです。postを呼び出した場合は、投稿(post_type=post)だけですし、固定ページ(post_type=page)も同様です。しかしユースケースによっては、そのリソースに関連する情報もまとめて取得したいケースがあります。「記事を書いた人」や「サムネイル画像」などがよく耳にするユースケースですね。

これらの情報についてもまとめて取得できるようにするのが、_embedクエリです。このクエリを追加することで、postに対するAPIリクエストで、authorの情報なども取得することができます。

_embed_fieldsをくみあわせるときは、_linksを使う

_embedを使いつつ、_fieldsでレスポンスの中身を選別したい場合、すこし書き方に工夫が要ります。それは「_fieldsで指定するフィールドに_links.<リソース名>も一緒に指定する」やり方です。下のサンプルでは、authorの情報を_embedで取得しつつ、_fieldsを利用して取得内容を絞り込んでいます。

 curl "https://example.com/wp-json/wp/v2/posts?&_embed=author&_fields=_links.author,_embedded,title,link,date_gmt" | jq ".[0]"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19163    0 19163    0     0   274k      0 --:--:-- --:--:-- --:--:--  292k
{
  "date_gmt": "2023-12-30T11:59:00",
  "link": "https://example.com/register-rest-api-route-on-wordpress/",
  "title": {
    "rendered": "WordPressのREST APIエンドポイントを追加する方法"
  },
  "_links": {
    "author": [
      {
        "embeddable": true,
        "href": "https://example.com/wp-json/wp/v2/users/1"
      }
    ]
  },
  "_embedded": {
    "author": [
      {
        "id": 1,
        "name": "Okamoto Hidetaka",
        "url": "https://example.com/",
        "description": =====",
        "link": "https://example.com/author/admin/",
        "slug": "admin",
        "avatar_urls": {
          "24": "https://secure.gravatar.com/avatar/xxxxx?s=24&d=mm&r=g",
          "48": "https://secure.gravatar.com/avatar/xxxxx?s=48&d=mm&r=g",
          "96": "https://secure.gravatar.com/avatar/xxxxx?s=96&d=mm&r=g"
        },
        "_links": {
          "self": [
            {
              "href": "https://example.com/wp-json/wp/v2/users/1"
            }
          ],
          "collection": [
            {
              "href": "https://example.com/wp-json/wp/v2/users"
            }
          ]
        }
      }
    ]
  }
}

この場合、_fields_embedded.authorと指定するのではなく、_fields=_links.author,_embeddedのように指定します。_links側でリソースを指定し、_embedded側では何も指定しないようにしています。

参考記事

https://stackoverflow.com/questions/60666913/wordpress-rest-api-fields-and-embed-parameters-are-not-working-simultaneously

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts