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

概要

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してやれば良い。