Вопрос или проблема
Существует ли способ предотвратить использование определенного варианта блока внутри определенного родительского блока?
У меня есть блок “внутренние блоки”, который по сути является групповым блоком, но без каких-либо настроек, это просто контейнер для внутренних блоков. У меня есть другой блок, который почти такой же, кроме того, что у него есть один атрибут. Я хотел бы использовать только первый блок и добавить второй в качестве варианта, но разрешить использование этого варианта только внутри одного конкретного родительского блока.
Это возможно?
Вариант — это представление оригинального блока.
Если блок-1 позволяет вставку блока-2, то блок-1 будет принимать все варианты блока-2.
core/columns
позволяет вставлять только core/column
.
- Если я создам вариант
core/column
, я бы ожидал, чтоcore/column
примет мой вариант. - Соответственно, обратное также должно иметь место.
Но… block.json
предлагает ключ blockHook, который может предложить некое решение.
"blockHooks": {
"acme/dialog": "firstChild"
}
П.С. Этот ответ от Tom J Nowell освещает дополнительные аспекты и весьма познавателен.
Ответ или решение
Для предотвращения использования определённой вариации блока внутри конкретного родительского блока в системе Gutenberg, необходимо рассмотреть несколько ключевых аспектов.
Понимание блоков и их вариаций
Для начала, важно отметить, что вариация блока представляет собой модифицированную версию оригинального блока с возможностью использования некоторых изменений или дополнительных атрибутов. Однако, если родительский блок может принимать все вариации дочернего блока, то это может упрощать управление ими в пределах определённых контекстов.
Подход через block.json
В файле block.json
можно использовать ключ blockHooks
, который может помочь настроить логику разрешения добавления дочерних блоков. Например, используя следующий код, можно наладить процесс встраивания блоков:
"blockHooks": {
"acme/dialog": "firstChild"
}
Этот код позволяет определять, как будут обрабатываться дочерние блоки. Но, к сожалению, это решение не является полноценным ответом на ваш вопрос, так как оно не позволяет ограничить вариации, которые могут быть использованы лишь в определённых родительских блоках.
Контроль за разрешёнными внутренними блоками
Для того чтобы более точно контролировать, какие блоки могут быть вложены в определённые родительские блоки, можно использовать фильтры WordPress. Применяя этот подход, вы можете указать, какие именно блоки могут использоваться как внутренние блоки для конкретного родительского блока. Это можно сделать, добавив фильтр в файл вашей темы или плагина:
add_filter('allowed_block_types', 'custom_allowed_block_types', 10, 2);
function custom_allowed_block_types($allowed_blocks, $post) {
if ($post->post_type === 'your_custom_post_type') {
return array(
'your/block-one',
// Разрешите варианты, которые хотите видеть
);
}
return $allowed_blocks;
}
Реализация ограничения на уровень вариаций
К сожалению, на данный момент не существует встроенной возможности в Gutenberg, чтобы ограничить использование вариаций блоков в зависимости от родительского блока. Для этого может потребоваться разработка пользовательского решения, которое позволит:
- Обнаружить родительский блок.
- Проверить, какие дочерние блоки добавляются.
- Исполнить логику проверки, чтобы запрещать или разрешать определённые вариации в зависимости от контекста.
Таким образом, для решения данной задачи вам потребуется разработать пользовательскую обработку, которая будет динамически управлять доступом к вариациям блоков в зависимости от их родительского контекста. Это может быть критически важным аспектом вашей разработки в мире Gutenberg.
Заключение
Хотя на данный момент нет прямой поддержки ограничения вариаций блоков, использование фильтров и разработка пользовательских решений может помочь достичь желаемого результата. Постоянно следите за обновлениями Gutenberg, так как новые функции и улучшения могут предложить более простые решения в будущем.