[WordPress] WP-APIの不要な項目を削除する

1 min read

概要

WP-API のwp-json/wp/v2/posts/%post_id%を叩くと以下のような JSON データが返ってくる(一部抜粋)

{
  "id": 843,
  "date": "2017-10-05T19:47:33",
  "date_gmt": "2017-10-05T10:47:33",
  "guid": {
    "rendered": "https://b.0218.jp/?p=3343"
  },
  "modified": "2017-10-06T16:40:09",
  "modified_gmt": "2017-10-06T07:40:09",
  "slug": "wordpress-wp-api-hoge",
  "status": "publish",
  "type": "post",
  "link": "https://b.0218.jp/wordpress-wp-api-hoge.html",
  "title": {
    "rendered": "hoge hoge"
  },
  "content": {
    "rendered": "hoge hoge"
  },
  "author": 2,
  "featured_media": 157,
  "comment_status": "open",
  "ping_status": "open",
  "sticky": false,
  "template": "",
  "format": "standard",
  "meta": []
  ...
}

個人的にauthorfeatured_mediaの項目は不要だったし、データサイズが少しでも減るのであれば嬉しいのでバックエンド側で握りつぶすことにした。

対応方法

フィルターフック(rest_prepare_post)を使用する。

add_filter('rest_prepare_post', function($response, $post, $request) {
    unset($response->data['author']);
    unset($response->data['featured_media']);

    return $response;
}, 10, 3);

引数に$responseというオブジェクトが渡される。削除したい項目が$response-dataにあるので上記のようにunset()して、return してやれば良い。