如何使用 GraphQL 查询 Wordpress 关系字段?

Posted

技术标签:

【中文标题】如何使用 GraphQL 查询 Wordpress 关系字段?【英文标题】:How to query Wordpress relational fields with GraphQL? 【发布时间】:2021-01-18 04:10:31 【问题描述】:

我在尝试使用 GraphQL 从 Wordpress 查询类型为“relationship”的自定义帖子类型时遇到问题

当我尝试查询这种类型为“post”的字段时,它只会导致此错误,并且会中断所有查询:

“消息”:“抽象类型 WpPostObjectUnion 必须在运行时为字段 WpPage_HomepageContent_heroSlider.buttonLink 解析为对象类型,其值为 typename:“ActionMonitorAction”,收到“未定义”。WpPostObjectUnion 类型应提供“resolveType”函数或者每种可能的类型都应该提供一个“isTypeOf”函数。",

这是查询麻烦的部分:

query HomePageQuery 
  allWpPage(filter: slug: eq: "home") 
    nodes 
      slug
      homepage_content 
        heroSlider 
          buttonText
          buttonLink 
            __typename
            ... on WpPost 
              id
            
          
        
      
    
  

你知道如何解决这个问题或做一些研究的方向吗?

谢谢!

【问题讨论】:

使用 graphiql Playground 探索可能的类型/属性 谢谢我这样做了。我终于找到了一个坏的和一个好的解决方案。见下文。 【参考方案1】:

我找到了解决方案来获取我需要的“关系:链接到页面或文章”类型的 Acf 字段的数据,如下所示:

exports.createSchemaCustomization = ( actions ) => 
  const  createTypes  = actions
  const typeDefs = `
      type WpPage_HomepageContent_heroSlider implements Node 
        buttonLink: WpPost
      
    `
  createTypes(typeDefs)

exports.createResolvers = ( createResolvers ) => 
  const resolvers = 
    Query: 
      allButtonLink: 
        type: ["WpPage_HomepageContent_heroSlider"],
        resolve(source, args, context, info) 
          return context.nodeModel.getAllNodes( type: "ActionMonitorAction" )
        ,
      ,
    ,
  
  createResolvers(resolvers)

但这是一个繁重的解决方案,我认为这将涉及对这种类型的每个 Acf 字段执行相同的操作...

最佳解决方案:我最终决定将我们的 ACF 链接字段设置为键入“关系:链接”。 这种方式更简单,我不需要任何“createSchemaCustomization”或“createResolvers”解决方法来在 GraphQL 中的 buttonLink 字段中获取我的 slug,并且贡献者仍然可以轻松地在 Wordpress 后台选择文章。

buttonLink 现在返回我:

 "buttonLink": 
   "url": "/2020/09/04/article-test/",
   "target": "",
   "title": "Article test avec image en avant"

这就是我所需要的

【讨论】:

以上是关于如何使用 GraphQL 查询 Wordpress 关系字段?的主要内容,如果未能解决你的问题,请参考以下文章

在 GraphQL Wordpress 查询搜索中包含 mediaItems

WordPress 盖茨比

GraphQL 检索特定块的数据 - Gatsby + Wordpress

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

Gatsby GraphQL + WordPress 中不存在字段(但在本地工作)

gatsby graphql 无法在“Query”类型上查询字段“allTribeEvents”