Ответ Wordpress REST показывает категории таксономии только с идентификаторами - PullRequest
0 голосов
/ 21 января 2020

Я использую WP в качестве автономной CMS с плагинами ACF и ACF-2-REST. Я добавил категории к пост-типу, и когда я выполняю вызов GET, он показывает мне всю информацию о конкретном посте, включая категории, но только идентификаторы. Если я хочу сопоставить его, я должен сделать еще один вызов в Категории, чтобы получить информацию об этих категориях (имя, родитель и т. Д. c).

Как я могу показать эту информацию вместо просто идентификатора в почтовом звонке?

Как теперь JSON выглядит при вызове / activity:

{
"id":111,
"date":"2020-01-18T15:39:27",
"date_gmt":"2020-01-18T15:39:27",
"guid":{"rendered":"https:\/\/url.be\/?post_type=activities&p=111"},
"modified":"2020-01-18T15:39:27",
"modified_gmt":"2020-01-18T15:39:27",
"slug":"walking-on-wood",
"status":"publish",
"type":"activities",
"link":"https:\/\/url.be\/activities\/walking-on-wood\/",
"title":{"rendered":"Walking on wood"},
"template":"",
"categories":[14,25,13,2,18,21,6,24],
"acf":{...}
}

То, что я хочу показать в «категориях» вместо просто цифр (из вызова категорий)

{
"id":3,
"count":1,
"description":"",
"link":"https:\/\/url.be\/category\/duration\/lower-than-30-min\/",
"name":"< 30 min.",
"slug":"lower-than-30-min",
"taxonomy":"category",
"parent":2,"meta":[],
"acf":[],
"_links":{"self":[{"href":"https:\/\/url.be\/wp-json\/wp\/v2\/categories\/3"}],
"collection":[{"href":"https:\/\/url.be\/wp-json\/wp\/v2\/categories"}],
"about":[{"href":"https:\/\/url.be\/wp-json\/wp\/v2\/taxonomies\/category"}],
"up":[{"embeddable":true,"href":"https:\/\/url.be\/wp-json\/wp\/v2\/categories\/2"}],
"wp:post_type":[{"href":"https:\/\/url.be\/wp-json\/wp\/v2\/posts?categories=3"},{"href":"https:\/\/url.be\/wp-json\/wp\/v2\/activities?categories=3"}],
"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}
}

Не могу найти никакого решения по inte rnet, как я мог бы манипулировать структурой этого JSON с помощью пользовательской функции, был бы очень признателен, если бы кто-то указал мне правильное направление. Спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Как обсуждалось в разделе комментариев, решение этого вопроса состоит в том, чтобы использовать пользовательский метод конечной точки для WP REST API и выполнить там дополнительные запросы для получения необходимых данных. Таким образом, вы можете выполнить все манипуляции с данными, чтобы получить идеальный ответ, в результате чего вы получите один вызов REST.

Как взято из официальных документов разработчика

Определение конечной точки метод и добавить дополнительные данные

<?php
add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/author/(?P<id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func', //note that this is the method it will fire
    'args' => array(
      'id' => array(
        'validate_callback' => function($param, $request, $key) {
          return is_numeric( $param );
        }
      ),
    ),
  ) );


/**
 * Grab latest post by an author along with its category!
 *
 * @param array $data Options for the function.
 * @return array Post,
 */
function my_awesome_func( $data ) {

  $posts = get_posts( array(
    'author' => $data['id'],
  ) );

  if(!empty($posts)) {
    //Example of appending extra data
    foreach($posts as $post) {
       $category = wp_get_post_terms($post->ID, 'category');
       $post['category'] = $category; 
    }
    return $posts;

  } else  {
    return new WP_Error( 'no_author', 'Invalid author', array( 'status' => 404 ) );
  }

}
...