当前位置: 首页 > 知识库问答 >
问题:

将ACF与GraphQL和Gatsby一起使用,灵活的内容不会返回其子块的顺序

融焕
2023-03-14

我有一个盖茨比网站,连接起来使用Wordpress作为无头CMS。我使用ACF在Wordpress中创建动态布局,然后将添加到页面的模块呈现到前端(盖茨比)。我正在使用ACF中的灵活内容功能在cms中动态创建布局,以便在React中轻松呈现。通常情况下,我会用next。js和Wordpress的REST API,它将“灵活内容”数据作为一个对象数组返回,我可以轻松迭代并呈现适当的内容。

我的问题是,使用GraphQL和Gatsby时,我从API中获得的“灵活内容”数据只是父页面对象体中的一堆对象。这意味着与模块/子模块在灵活内容块中的放置顺序无关,因为它们不是数组的一部分。目前我的解决方法是向子模块添加一个额外的字段,根据数字值指定其在页面上的顺序......但这很恶心,对于客户端来说将是一种可怕的体验,所以我对此不满意。

是否有一种方法可以为AFC灵活内容块中的每个项目返回直接与其索引/位置相关的值。或者,当使用盖茨比插件返回数据时,是否有方法返回数组中的子项。

目前,我的查询看起来有点像这样:

allWordpressPage {
  edges {
    node {
      id
      slug
      status
      template
      title
      childWordPressAcfFeaturedShowcaseCarousel {
        id
        title
        other_stuff
      }
      childWordPressAcfIphonesAndContent {
        id
        title
        other_stuff
      }
      childWordPressAcfContentAndImageSlideShow {
        id
        title
        other_stuff
      }
    }
  }
}

这将返回类似于:

{
  id: 123,
  slug: 'hello',
  template: 'default',
  title: 'Help Me',
  childWordPressAcfFeaturedShowcaseCarousel: {
    id: 1232
    title: 'Bonjour'
    other_stuff: {....}
  },
  childWordPressAcfIphonesAndContent: {
    id: 1232
    title: 'Bonjour'
    other_stuff: {....}
  },
  childWordPressAcfContentAndImageSlideShow: {
    id: 1232
    title: 'Bonjour'
    other_stuff: {....}
  }
}

但是相反,我想要这样的东西:

{
  id: 123,
  slug: 'hello',
  template: 'default',
  title: 'Help Me',
  childWordPressAcfFeaturedShowcaseCarousel: {
    id: 1232,
    index: 1,
    title: 'Bonjour',
    other_stuff: {....}
  },
  childWordPressAcfIphonesAndContent: {
    id: 1232,
    index: 2,
    title: 'Bonjour',
    other_stuff: {....}
  },
  childWordPressAcfContentAndImageSlideShow: {
    id: 1232,
    index: 3,
    title: 'Bonjour'
    other_stuff: {....}
  }
}

甚至更好:

{
  id: 123,
  slug: 'hello',
  template: 'default',
  title: 'Help Me',
  module: [
    childWordPressAcfFeaturedShowcaseCarousel: {
      id: 1232,
      title: 'Bonjour',
      other_stuff: {....}
    },
    childWordPressAcfIphonesAndContent: {
      id: 1232,
      title: 'Bonjour',
      other_stuff: {....}
    },
    childWordPressAcfContentAndImageSlideShow: {
      id: 1232,
      title: 'Bonjour'
      other_stuff: {....}
    }
  ]
}

共有1个答案

邢华清
2023-03-14

所以我刚刚想通了。事实证明,在查询灵活内容块的数据时,有几件事需要记住。要访问灵活内容字段,而不是使用它们的字段名,您需要使用[field_name]_[post_type](如果您的WordPress页面中有名为page_builder的字段,则需要使用page_builder_page)。一旦您这样做,所有内容都将按照ACF块中的确切顺序返回数组。

所以现在我的查询看起来像这样:

allWordpressPage {
  edges {
    node {
      id
      slug
      status
      template
      title
      acf {
        modules_page {
          ... on WordPressAcf_featured_showcase_carousel {
            __typename
            id
            title
            other_stuff
          }
          ... on WordPressAcf_iphones_and_content {
            __typename
            id
            title
            other_stuff
          }
          ... on WordPressAcf_content_and_image_slide_show {
            __typename
            id
            title
            other_stuff
          }
        }
      }
    }
  }
}
 类似资料:
  • 我正在尝试将转发器字段添加到灵活的内容行中,但由于某种原因,没有输出任何内容。我已经检查了字段,它们似乎是正确的,所以有人可以指出我哪里出错了吗?谢谢

  • 模块顺序和返回代码 你不能简单地把一个模块放到一个部分中,希望它能完成它应该做的工作。 模块在一个部分中列出的顺序至关重要。

  • 问题内容: 我试图建立一个对象,使其具有封装的$ .getJSON方法。这是我的设置: 现在的问题似乎是我没有访问有意义的getJSON回调函数中的“ this”。 这种功能是否有解决方法,或者我只是在想完全错误的方式?我以前只真正使用过PHP OO编码,所以JS OO对我来说有点新。 我尝试过的其他事情是: 但是, 问题答案: 您的第一次尝试已经结束,但是正如您所说的,您无法在回调内部进行访问,

  • 问题内容: 我有两段代码用于学习Python 3.1中的多处理。我的目标是使用所有可用处理器中的100%。但是,此处的代码段在所有处理器上仅达到30%-50%。 无论如何,要“强制” python使用全部100%?操作系统(Windows 7、64位)是否限制了Python对处理器的访问?当下面的代码段运行时,我打开任务管理器并观察处理器的峰值,但从未达到并维持100%。除此之外,我还可以看到在此

  • 问题内容: 我有一个表格,其中填充了oldUserID,newUserID,名称和电子邮件。我想将sp_send_dbmail用于每一行的电子邮件。例如: oldUserID | newUserID | 名称| 电子邮件 21213125 | 2355233571 | 汤姆| tom@gmail.com 65465465 | 4564884664 | 垫子| mat@gmail.com 依此类推,

  • 有没有办法使用ACF to REST-API插件返回自定义帖子类型的帖子标题?当我在帖子类型上运行查询时,我得到的只是帖子ID,然后是我在其中设置的任何字段,但如果我可以像我只是使用ACF而不通过REST-API调用时一样抓取它,我希望不必在ACF中创建另一个名为“标题”的字段。 这是我对名为“book”的自定义帖子类型的GET请求: 该帖子类型包含作者姓名字段和用于将书籍段落与书籍相关联的关系字