Гэтсби: Использование GraphQL-запроса для пользовательского типа записей с пользовательской таксономией - PullRequest
1 голос
/ 05 мая 2019

Я использую Gatsby для доставки внешнего интерфейса в WordPress и запроса данных с помощью GraphQL.

У меня есть сообщение с пользовательским типом сообщения и пользовательской таксономией.

Однако, когда я запрашиваю CPT, я могу получить номер пользовательской таксономии, но не знаю, как получить соответствующие имена.

Ниже мой запрос;

{
    wordpressWpPortfolio {
        title
        slug
        id
        portfolio_categories
    }
}

И это то, что возвращается;

{
    "data": {
        "wordpressWpPortfolio": {
            "title": "Test Portfolio 1",
            "slug": "test-portfolio-1",
            "id": "5caf7182-c9f5-53d9-94da-b49cfbdc6d7f",
            "portfolio_categories": [
                5
             ]
         }
     }
}

Однако на детской площадке GraphQL нет других полей, которые можно выбрать.

Ниже мой ожидаемый результат;

{
    "data": {
        "wordpressWpPortfolio": {
            "title": "Test Portfolio 1",
            "slug": "test-portfolio-1",
            "id": "5caf7182-c9f5-53d9-94da-b49cfbdc6d7f",
            "portfolio_categories": [
                "id":5,
                "name":"portfolio category name"
            ]
        }
    }
}

Есть ли способ "присоединиться" к остальным конечным точкам?

Что я делаю не так и как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

То, что вы ищете, это пользовательский нормализатор.

На странице gatsby-source-wordpress есть отличный пример, который на самом деле очень похож на то, что вы хотите сделать.

Вот ссылкаhttps://www.gatsbyjs.org/packages/gatsby-source-wordpress/#example-1

В качестве альтернативы, если вам удобнее работать с WordPress, вы можете изменить свой CPT rest API, чтобы он возвращал как идентификатор категории, так и имя поля, используя метод register_rest_api () .

Примерно так:

register_rest_field(
// Custom Post Type name
'portfolio',
// name of field that appears in rest API
'portfolio_categories',
    array(
        'get_callback' => function( $data ) {
            $category_terms = wp_get_post_terms( $data['id'], 'portfolio_categories' );
            $portfolio_categories = array();
            foreach( $category_terms as $term ) {
                $portfolio_category_obj = new StdClass();
                $portfolio_category_obj->ID = $term->ID;
                $portfolio_category_obj->name = $term->name;
                array_push( $portfolio_categories, $portfolio_category_obj );
            }
            return $portfolio_categories;
        },
    )
);

Это добавит дополнительное поле в вашем API отдыха к названному portfolio_categories, которое возвращает массив, чтобы вы могли использовать GraphQL, как и ожидалось.

0 голосов
/ 05 мая 2019

Вам необходимо указать имя в запросе:

{
    wordpressWpPortfolio {
       title
       slug
       id
       portfolio_categories {
          id
          name
       }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...