У меня есть проект React + Gatsby JS, который извлекает данные с сайта Wordpress через их безголовый API. Я всего лишь новичок ie для Гэтсби.
Каждая страница на моем сайте состоит из блоков, которые в свою очередь состоят из полей. Я использую ACF для их создания.
В настоящее время я могу получить каждую страницу и список блоков на этой странице, используя следующий запрос GraphQL:
query ($id: String!) {
currentPage: wordpressPage(id: {eq: $id}) {
title
acf {
page_blocks {
block_type {
acf_fc_layout
}
}
}
}
}
Это возвращает следующие данные для страницы с идентификатором f4c4f4a7-ba0d-55b1-8877-16f543c22b80
{
"data": {
"wordpressPage": {
"id": "f4c4f4a7-ba0d-55b1-8877-16f543c22b80",
"acf": {
"page_blocks": [
{
"block_type": [
{
"acf_fc_layout": "page_title_and_text"
},
{
"acf_fc_layout": "two_column_media_and_text"
}
]
}
]
}
}
}
}
Блоки находятся рядом с afc_fc_layout
. И page_title_and_text
, и two_column_media_and_text
являются блоками страниц на этой странице.
Теперь я думаю, что следующим шагом будет создание компонента React для каждого из этих блоков с передачей данных настраиваемого поля для каждого компонента этому компоненту. Если на странице нет блока, мне не нужно было бы извлекать поля для этого блока, верно?
Первоначально я думал, что я выполню другой запрос из моего компонента React, запрашивая поля для этого конкретного блока. Но я понял, что на самом деле не могу добавить переменные (идентификатор страницы) в запрос stati c в моих компонентах, по документам Гэтсби , поэтому я не смогу запросить эту конкретную c страницу для своих полей. Пожалуйста, исправьте меня, если я ошибаюсь.
Я считаю, что мне нужно извлечь те поля, которые мне нужны, из моего основного запроса, который я вам здесь показал, но, похоже, абсолютно чокнутым приходится запрашивать все возможные пользовательские настройки. поле на сайте, когда не все страницы будут иметь одинаковые блоки.
В идеале должен быть какой-то синтаксис, такой как
...
acf {
page_blocks {
block_type {
acf_fc_layout
if (acf_fc_layout eq page_title_and_text) {
title
text
}
if (acf_fc_layout eq two_column_media_and_text) {
media
text
}
}
}
}
...
И тогда я передам эти поля соответствующему компоненту React.
Как правильно go по этому поводу?
Примечание. В настоящее время я в состоянии получить поля из API для визуализации блоков. Мне больше интересно, есть ли какой-нибудь способ, которым мой запрос GraphQL может отфильтровать данные для меня, или есть ли способ настроить конечную точку WP, чтобы показать мне данные поля, отфильтрованные по блокам, которые фактически находятся на странице.
Пример: сайт запрашивает данные в блоках 4,3,2,10,12,15 .... хотя на странице есть только блок 2.
Я беспокоюсь, что Разработчикам, которые хотят добавлять блоки в будущем, придется каждый раз переписывать запрос, что ухудшает масштабируемость и потенциальную производительность сайта.