正在从JSON响应中删除字段


Removing fields from the JSON response

我正在使用WP REST API(WP API),并通过下面的调用检索帖子。

wp-json/posts

有170个帖子,JSON文件为3.1MB,下载大约需要9秒。当提取帖子时,我只需要标题和featurd图像,因此不需要99%的JSON文件。

我一直在研究下面这个从响应中删除字段的方法,它在一定程度上有效,但仍然不会删除IDauthor等字段。

function remove_extra_data( $data, $post, $context ) {
  unset( $data['ID'] );
  unset( $data['status'] );
  unset( $data['excerpt'] );
  unset( $data['type'] );
  unset( $data['author'] );
  unset( $data['content'] );
  unset( $data['parent'] );
  unset( $data['date'] );
  unset( $data['modified'] );
  unset( $data['format'] );
  unset( $data['slug'] );
  unset( $data['guid'] );
  unset( $data['menu_order'] );
  unset( $data['comment_status'] );
  unset( $data['ping_status'] );
  unset( $data['sticky'] );
  unset( $data['date_tz'] );
  unset( $data['date_gmt'] );
  unset( $data['modified_tz'] );
  unset( $data['modified_gmt'] );
  unset( $data['meta'] );
  return $data;
}
add_filter( 'json_prepare_post', 'remove_extra_data', 10, 3 );

那么,删除所有不需要的包含嵌套内容的字段的最佳方法是什么呢?

如果JSON被严格解码为数组,而不是对象,则可以使用类似array_filter()的东西来过滤掉那些您不想要的属性。

// This will only work in PHP 5.6+
$keys = [
    'ID',
    'author',
];
return array_filter($data, function($k) use ($keys) {
    return in_array($k, $keys, true);
}, ARRAY_FILTER_USE_KEY);