У меня есть гибкий тип поля содержимого в Wordpress (с ACF), и я получаю ошибки при попытке построить gatsby.
Я использую следующие плагины:
Для gatsby я использую gatsby-source-wordpress.
{
allWordpressPage {
edges {
node {
title
acf {
page_builder_page {
... on WordPressAcf_hero {
title
subtitle
}
... on WordpressAcf_text {
text
}
}
}
}
}
}
}
Запрос, подобный приведенному выше, работает, только если блок page_builder типа страница для какой-либо страницы использует блок герой и текст. Если я настрою эту страницу в первый раз или создам новый настраиваемый тип сообщения с тем же полем page_builder, мне нужно будет заполнить хотя бы одно поле для каждого гибкого типа блока контента, прежде чем заработает graphql-запрос.
В противном случае я получаю подобные ошибки для каждого неиспользуемого блока (например, если тип героя имеет контент, но не текстовый тип):
GraphQL request: Fragment "TextBlockFragment" cannot be spread here as objects of
type "WordPressAcf_hero" can never be of type "WordPressAcf_text".
Есть ли этому решение? Думаю, так быть не должно. Как и сейчас, мне нужно заполнить всю страницу фиктивным содержимым при первой настройке, прежде чем я смогу создать ее с помощью Gatsby.

Я думаю, что проблема, с которой вы столкнулись, похожа на довольно распространенный, с которой я также столкнулся при использовании Gatsby + WordPress REST API.
Кратко можно сказать, что WordPress REST API, например, будет возвращать логическое значение, когда есть поле галереи ACF без изображений, а не null, что ожидает запрос GraphQL, когда поле пусто. Я подозреваю, что у вас происходит то же самое: вы запрашиваете незаполненные подполя и получаете ответ, который GraphQL интерпретирует как неправильный тип, а не null. (Полное раскрытие, мой единственный опыт работы с GraphQL — через Гэтсби.)
К счастью, я думаю, что у вас есть много вариантов решить эту проблему.
Команда Gatsby и участники активно работали над этим в последнее время, и в настоящее время вы можете опробовать предварительную версию нового подхода здесь: https://www.gatsbyjs.org/blog/2019-03-04-new-schema-customization/.
Если хотите, вы можете прочитать намного больше о проблеме и предыстории здесь: https://github.com/gatsbyjs/gatsby/issues/3344
Два решения, которые работают сейчас, если вы не хотите использовать что-то еще не полностью объединенное с Gatsby:
null для этого поля ACF, как описано @pieh из команды Gatsby, и в этой проблеме GitHub есть еще примеры для других типов полей.placeholder). Подвох здесь в том, что у вас есть эти поддельные сообщения для каждого пользовательского типа сообщений, которые нельзя удалить из WordPress.Я использовал оба подхода, и оба работают. Я бы сказал, что № 2, вероятно, более надежен, поскольку он работает для всех полей, которые вы используете одновременно, но потенциально более запутан в зависимости от того, кто использует CMS: «Почему эти сообщения здесь?»
Надеюсь, это полезно!