Удаление полей из ответа JSON

Я использую WP REST API (WP API) и получаю сообщения с помощью этого вызова ниже.

wp-json/posts

Есть 170 сообщений, а размер файла JSON составляет 3,1 МБ, загрузка которого занимает около 9 секунд. При извлечении сообщений мне нужны только данные заголовка и изображения, поэтому 99% файла JSON не нужны.

Я рассматривал этот метод ниже, который удаляет поля из ответа, он работает до некоторой степени, но все еще не удаляет такие поля, как ID и author.

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 );

Итак, каков наилучший способ удалить все ненужные поля, включая поля с вложенным содержимым?


person Cecil Theodore    schedule 26.06.2015    source источник
comment
предоставить свой собственный интерфейс, который не генерирует кучу данных, которые вы все равно просто выбросите?   -  person Marc B    schedule 26.06.2015
comment
У вас есть доступ к json builder? Если это так, вы можете просто изменить, чтобы отправлять только обязательные поля.   -  person Dipen Shah    schedule 26.06.2015
comment
Как и предполагали другие, вы подходите к этой проблеме с неправильного направления. Вы должны предоставить свой собственный метод создания именно того, что вам нужно.   -  person mittmemo    schedule 26.06.2015
comment
Я признаю, что расширение wp-json предлагает плохой API. Невозможно точно сказать, какие поля вы хотите от поста. Однако пробовали ли вы этот URL: wp-json/posts?context=parent. Следуя документации, он должен доставлять меньше данных на сообщение.   -  person hek2mgl    schedule 26.06.2015
comment
@ hek2mgl спасибо за ваш ответ. Да, я изо всех сил пытаюсь найти пуленепробиваемый метод для этого, так как было бы здорово, если бы пользователи WP-API могли настраивать, какие поля добавляются в JSON.   -  person Cecil Theodore    schedule 26.06.2015


Ответы (1)


Если 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);
person Sherif    schedule 26.06.2015