Я пришел к решению, используя функцию предварительной обработки. Пара ключ/значение добавляется к родительскому узлу. Названный «headline_level», он позже упоминается дочерним элементом, и добавляется +1. Это число присваивается переменной ветки в качестве номера заголовка, "headline_level" увеличивается на 1 для дочернего элемента, если у него есть дочерние элементы.
На этом изображении мы видим, что родительский «офис» извлекает дочерние узлы в качестве полей.
Диаграмма уровня
Родитель (h1)
|_ Ребенок (h2) (см. изображение)
|_ Внук (h3)
|_ Великий внук (h4)
Функция предварительной обработки для темы
функция THEME_preprocess_HOOK(&$переменные) {
$узел = $переменные['узел'];
/**
* Родительский уровень заголовка
* Отображает логическую структуру заголовка
* Применяет более высокое значение к 'headline_level' для подчиненных типов контента; используется в '/templates/node--HOOK.html.twig'
*/
если ($node->_referringItem) {
// Переменные
$счетчик = 1; // начать уровень с 1
// Добавляем 'headline_level' к узлу HOOK
$node->headline_level = $counter;
$parentHeadline = $node->_referringItem->getEntity()->headline_level;
// Проверяем узел на $parentHeadline, иначе $counter, устанавливаем переменную twig
если (isset($parentHeadline)) {
// Увеличиваем 'headline_level' на 1
++$родительский заголовок; // добавить 1
$node->headline_level = $parentHeadline;
$variables['office_headline_level'] = $parentHeadline;
} еще {
$variables['headline_level'] = $counter;
}
}
Шаблон Twig для типа контента
<div>
<h{{ headline_level ?: 2 }}>{{ label }}</h{{ headline_level ?: 2 }}>
{{ content.field_people }}
</div>
Как упоминалось в комментариях, эти офисы должны были быть таксономией. Однако они были созданы как типы контента и на них ссылаются поля.