Как отобразить родительскую категорию с ребром первого уровня в REST API

Мне нужна помощь в WP REST API. Я хочу отображать категории с дочерним элементом первого уровня с некоторыми атрибутами. Вот как это должно выглядеть:

{ Parent "id": 3, "name": "Football", "slug": "football" child { "id": 5, "name": "League", "slug": "league" } } 

Пожалуйста, помогите мне … Спасибо

Я предполагаю, что вам нужны данные о таксономии в каждом элементе post_type JSON, но логика одинакова для конечных точек таксономий и ответа JSON.

Я вижу два способа его достижения.

  1. фильтрация данных с использованием фильтра rest_prepare_post_type ( ссылка ) или
  2. создавая новое поле (ы), используя функцию register_rest_field . ( Ссылка )

Я бы рекомендовал второй подход. Это тот, который я использовал недавно с пользовательским типом сообщения

Случай 1: rest_prepare_post_type

В первом случае вы должны использовать фильтр rest_prepare_post_type чтобы получать данные, генерировать rest_prepare_post_type данные, добавлять их в массив данных и возвращать отфильтрованные данные. В этом случае, если тип сообщения «post», крючок – rest_prepare_post.

 /** * @summary Filters post rest response * * @description Filters post rest response removing or adding certain information * @param object $data The response object. * @param object $post The original post type object. * @param object $request Request used to generate the response. * @return object $data The filtered response object. */ function wpse_283452_rest_prepare_post($data, $post, $request) { $_data = $data->data; // say you want to remove author from the response unset($_data['author']); // if you want to ADD fields, you would do the logic here and... // add it to the $_data array $data->data = $_data; // and finally return it return $data; } add_filter('rest_prepare_post', 'wpse_283452_rest_prepare_post', 10, 3); с /** * @summary Filters post rest response * * @description Filters post rest response removing or adding certain information * @param object $data The response object. * @param object $post The original post type object. * @param object $request Request used to generate the response. * @return object $data The filtered response object. */ function wpse_283452_rest_prepare_post($data, $post, $request) { $_data = $data->data; // say you want to remove author from the response unset($_data['author']); // if you want to ADD fields, you would do the logic here and... // add it to the $_data array $data->data = $_data; // and finally return it return $data; } add_filter('rest_prepare_post', 'wpse_283452_rest_prepare_post', 10, 3); 

Если вы хотите сделать то же самое для таксономий, вы бы использовали rest_prepare_taxonomy/ ( reference )

Случай 2: register_rest_field (рекомендуется)

Вы зарегистрируете новое поле с функцией register_rest_field и заполните его так, как хотите, используя обратный вызов

 /** * Registers a new field on an existing WordPress object type. * * @since 4.7.0 * * @global array $wp_rest_additional_fields Holds registered fields, organized * by object type. * * @param string|array $object_type Object(s) the field is being registered * to, "post"|"term"|"comment" etc. * @param string $attribute The attribute name. * @param array $args { * Optional. An array of arguments used to handle the registered field. * * @type string|array|null $get_callback Optional. The callback function used to retrieve the field * value. Default is 'null', the field will not be returned in * the response. * @type string|array|null $update_callback Optional. The callback function used to set and update the * field value. Default is 'null', the value cannot be set or * updated. * @type string|array|null $schema Optional. The callback function used to create the schema for * this field. Default is 'null', no schema entry will be returned. * } */ register_rest_field( 'post', 'wpse_283452_taxonomies', array( 'get_callback' => function ($object, $field_name, $request) { return wpse_283452_taxonomies_callback($object); }, ) ); /** * @summary Return and array with taxonomy info * * @description Returns an array with taxonomy information in a custom way * @param object $object The rest item original object * @return array $custom_taxonom an array with taxonomy terms with their information in a custom way */ function wpse_283452_taxonomies_callback($object) { $post_id = $object['id']; $terms = wp_get_post_terms( $post_id, 'business_type', array( 'fields' => 'all', ) ); // here you should construct an array with the information in $terms in the way/structure you want return $terms; } 

Для таксономий вы использовали бы таксономический пудинг вместо «post» в качестве первого аргумента в register_rest_field.

Вот и все.

Сообщите мне, если работает.