Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类

Posted

技术标签:

【中文标题】Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类【英文标题】:Gatsby: Using GraphQL Query on Custom Post Type with Custom Taxonomy 【发布时间】: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 ) 修改吗? 【参考方案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(或函数)中进行修改或做其他事情

以上是关于Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义帖子类型上使用Woocommerce的二级图像上传Metabox?

Wordpress - 特色图像元框未显示在自定义帖子类型上

php 在自定义帖子类型存档和一些自定义分类存档上强制命令到`menu_order`

使用特定标签在自定义帖子类型和分类中搜索

WordPress:在自定义帖子类型中获取模块名称的帖子 slug

如何在自定义帖子类型帖子 URL 的末尾添加查询字符串