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

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark