Я настроил около 15 различных макетов в WordPress, используя функцию гибкого содержимого в ACF. Поскольку их так много, это означает, что некоторые из них не используются автором контента. Когда gatsby извлекает содержимое и создает структуру данных graphql, она создает структуру на основе используемых макетов. Когда я настраиваю свои запросы для извлечения всех макетов, я получаю сообщение об ошибке, потому что запрашиваются некоторые макеты, которых нет в структуре graphql (поскольку они не используются автором). Вот пример запроса.
acf {
content_layouts_page {
__typename
... on WordPressAcf_pullout_lead_with_list {
...plwlFragment
}
... on WordPressAcf_client_list {
...clFragment
}
... on WordPressAcf_titled_list_with_item_description {
...tlwidFragment
}
...more layouts defined
}
}
Как я могу настроить свои запросы graphql, чтобы они были «доказательством будущего», когда автор решит использовать неиспользуемый макет.
Это решение, о котором я думал, но я не уверен, возможно ли это. Если бы я мог просто запросить __typename, который вернет массив. Затем динамически создайте запрос graphql на основе существующих макетов.
// __typename array = ['WordPressAcf_pullout_lead_with_list', 'on WordPressAcf_client_list']
let queryString = ''
__typename.forEach(layout => {
switch (layout) {
case 'WordPressAcf_pullout_lead_with_list':
queryString += '...on WordPressAcf_pullout_lead_with_list { ...plwlFragment }'
break;
....
}
})
// Use queryString in graphql query
Опять же, не уверен, что это возможно, но наверняка решит много проблем.
Этот вопрос также был задан в репозитории Gatsby Github, и были даны рекомендации. Подробнее здесь



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


По состоянию на 1 марта 2019 года невозможно динамически создавать запросы graphql. Решение этой проблемы состоит в том, чтобы иметь «фиктивную» страницу со всеми вашими макетами контента и игнорировать ее в вашем запросе graphql. Хотя вы игнорируете это, ваша схема graphql будет содержать все структуры макета.
allWordpress(Page|Post)(filter:{slug:{ne:"dummy-page"}}) {
edges {
node {
...
}
}
}