我正在使用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"
]
}
}
}
有什么办法可以“加入”其余的终点?
我在做什么错,我该如何解决?
答案 0 :(得分:2)
您正在寻找的是自定义标准化器。
gatsby-source-wordpress
页上有一个很好的例子,它实际上与您要执行的操作非常相似。
这是链接https://www.gatsbyjs.org/packages/gatsby-source-wordpress/#example-1
或者,如果您更熟悉WordPress,则可以使用register_rest_api()方法修改CPT rest API以返回类别ID和字段名称。
类似这样的东西:
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;
},
)
);
这将在您的rest API中添加一个名为portfolio_categories
的额外字段,该字段返回一个数组,以便您可以按预期使用GraphQL。
答案 1 :(得分:0)
您需要在查询中包括姓名:
{
wordpressWpPortfolio {
title
slug
id
portfolio_categories {
id
name
}
}
}