【问题标题】:Gatsby with wordpress does not find an ACF flexible content field if it is unused如果未使用,带有 wordpress 的 Gatsby 找不到 ACF 灵活内容字段
【发布时间】:2019-08-08 15:37:21
【问题描述】:

我在 Wordpress 中有一个灵活的内容字段类型(使用 ACF),我在尝试构建 gatsby 时遇到错误。

我使用以下插件:

  • ACF 到 REST api
  • ACF 到 REST api 递归
  • 高级自定义字段专业版

对于 gatsby,我使用 gatsby-source-wordpress。

{
  allWordpressPage {
    edges {
      node {
        title
        acf {
          page_builder_page {
            ... on WordPressAcf_hero {
              title
              subtitle
            }
            ... on WordpressAcf_text {
              text
            }
          }
        }
      }
    }
  }
}

只有当某些页面的 page 类型上的块 page_builder 使用 hero 并且文本块。如果我是第一次设置此页面,或者创建具有相同 page_builder 字段的新自定义帖子类型,我需要为每个灵活的内容块类型填充至少一个字段,然后 graphql-query 才能工作。

否则,对于每个未使用的块,我都会收到与此类似的错误(例如,如果 hero-type 有内容但没有 text-type):

GraphQL request: Fragment "TextBlockFragment" cannot be spread here as objects of
type "WordPressAcf_hero" can never be of type "WordPressAcf_text".

有解决办法吗?我想它不应该是这样的。就像现在一样,我需要在第一次设置页面时用虚拟内容填充整个页面,然后才能使用 Gatsby 实际构建它。

【问题讨论】:

    标签: wordpress graphql gatsby


    【解决方案1】:

    我认为您遇到的问题类似于 a fairly common one 我在使用 Gatsby + WordPress REST API 时也遇到过。

    一个简短的总结是,例如,当存在没有图像的 ACF 库字段时,WordPress REST API 将返回一个布尔值,而不是 null,这是 GraphQL 查询在字段为空时所期望的.我怀疑同样的事情发生在你身上:你正在查询尚未填写的子字段,你得到的响应被 GraphQL 解释为错误的类型,而不是null。 (完全披露,我对 GraphQL 的唯一经验是通过 Gatsby。)

    幸运的是,我认为您有很多选择可以解决这个问题。

    新的盖茨比解决方案

    Gatsby 团队和贡献者最近一直在非常积极地开展这项工作,您目前可以在此处试用新方法的预览版:https://www.gatsbyjs.org/blog/2019-03-04-new-schema-customization/

    如果需要,您可以在此处阅读更多有关问题和背景的信息:https://github.com/gatsbyjs/gatsby/issues/3344

    现有的快速 WordPress 解决方案

    如果您不想使用尚未完全合并到 Gatsby 中的东西,现在可以使用两种解决方案:

    1. Setting empty responses to null for that ACF field as described by @pieh on the Gatsby team,还有其他字段类型的 GitHub 问题中的更多示例
    2. 创建“虚拟”内容,填写所有内容,然后在显示之前过滤掉该帖子(例如,当 slug 为 placeholder 时)。这里的问题是,对于每个自定义帖子类型,您都有这些无法从 WordPress 中删除的虚假帖子。

    我使用了这两种方法,并且都有效。我想说#2 可能更可靠,因为它同时适用于您正在使用的所有字段,但可能更令人困惑,具体取决于谁在使用 CMS:“为什么这些帖子在这里?”

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2018-05-31
      • 2018-12-13
      • 2016-02-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2018-12-06
      • 2019-07-21
      • 2017-01-07
      相关资源
      最近更新 更多