【问题标题】:Gatsby: Using GraphQL Query on Custom Post Type with Custom TaxonomyGatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类
【发布时间】:2019-09-23 04:33:14
【问题描述】:

我正在使用 Gatsby 为 WordPress 提供前端并使用 GraphQL 查询数据。

我有一个包含自定义帖子类型和自定义分类的帖子。

但是当我在CPT上查询时,我可以得到Custom Taxonomy的编号,但不知道如何检索相应的名称。

以下是我的查询;

{
    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"
            ]
        }
    }
}

有没有办法“加入”其余的端点?

我做错了什么,我该如何解决?

【问题讨论】:

  • 这可以在 WP 中用 register_graphql_connection( $config ) 修改吗?

标签: wordpress graphql gatsby


【解决方案1】:

您正在寻找的是自定义规范器。

gatsby-source-wordpress 页面上有一个很好的示例,与您想要实现的目标非常相似。

或者,您可能希望修改您的 CPT REST API 以使用 register_rest_api() 方法返回字段的类别 IDname,前提是您对 WordPress 感到满意发展。

类似这样的:

register_rest_field(
    // Custom Post Type name
    'portfolio',
    // Name of field being added to your REST API response (portfolio_categories)
    '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。

之后记得运行gatsby develop 来启动/重启你的开发服务器。

【讨论】:

    【解决方案2】:

    您需要在查询中包含姓名:

    {
        wordpressWpPortfolio {
           title
           slug
           id
           portfolio_categories {
              id
              name
           }
        }
    }
    

    【讨论】:

    • 谢谢我试过了,但只返回一个整数... "message": "Field \"portfolio_categories\" must not have a selection because type \"[Int]\" has no subfields .",
    • 没有解析器,这就是 Wordpress RestAPI 开箱即用的方式,所以我需要在 Wordpress CPT UI(或函数)中进行修改或做其他事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多