eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

FSE (block theme)

FSE (Full Site Editing) - это набор возможностей WordPress, который позволяет редактировать не только контент записи, но и всю структуру сайта через блоки: header, footer, loop, sidebar, навигацию, шаблоны страниц и шаблонные части.

В современных версиях WordPress чаще используется термин Site Editor - редактор сайта. А тема, которая поддерживает такой режим, называется block theme.

Block theme - это тема, где шаблоны описаны не PHP-файлами, а HTML-файлами с разметкой блоков.

Главная страница редактора сайта в админке WordPress

Из чего состоит блочная тема (block theme)

Минимально блочная тема должна иметь файл index.html в папке /templates (или старой папке /block-templates).

Обычно структура выглядит так:

theme/
│
├─ parts/          - части шаблонов: header, footer, sidebar и т.д.
│  ├─ header.html
│  ├─ footer.html
│  └─ sidebar.html
│
├─ patterns/       - паттерны блоков.
│  └─ *.php
│
├─ styles/         - вариации глобальных стилей.
│  └─ *.json
│
├─ templates/     - основные шаблоны страниц.
│  ├─ index.html
│  ├─ front-page.html
│  ├─ home.html
│  ├─ single.html
│  ├─ page.html
│  ├─ archive.html
│  └─ 404.html
│
├─ theme.json      - глобальные настройки и стили: палитра, layout и т.д.
├─ style.css       - метаданные темы и базовые стили.
└─ functions.php   - PHP-логика темы, если она нужна.

Файлы из /templates соответствуют обычной иерархии шаблонов WordPress, только вместо .php используется .html.

Файлы из /parts - это переиспользуемые части шаблона. Подключаются через блок core/template-part:

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

Чтобы определить в коде является ли тема блочной есть функция: wp_is_block_theme()

Как загружается шаблон страницы

При запросе, после того как WordPress загрузил окружение и подготовил основной запрос:

Другими словами:

  • WordPress определяет подходящий шаблон по обычной иерархии файлов темы.

  • Для block theme он ищет не .php, а .html шаблон в папке templates, например templates/front-page.html. HTML-файлы должны называться так же, как PHP-файлы в классической иерархии шаблонов.

  • Если шаблон был изменен в редакторе сайта, WordPress может взять его не из файла темы, а из базы данных (wp_template). Для частей шаблона используется wp_template_part.

  • Содержимое шаблона читается как текст и парсится как набор блоков.

  • Подключаются части шаблона из parts, например header и footer через блок core/template-part.

  • Применяется theme.json: цвета, отступы, шрифты, layout, стили блоков, CSS-переменные.

  • WordPress генерирует итоговые стили и добавляет их на страницу через систему global styles.

  • Собранная страница выводится через единый файл шаблона: wp-includes/template-canvas.php.

По сути, FSE - это шаблонизация на блоках поверх классического PHP-ядра WordPress.

Что происходит при редактировании шаблона

Исходные шаблоны лежат в папке темы templates/. Когда шаблон изменяется через редактор сайта, WP не меняет файл темы, а сохраняет изменения в базе данных в типах постов:

  • wp_template - для шаблонов.
  • wp_template_part - для частей шаблонов.

Поэтому на сайте может одновременно использоваться смесь:

  • файловых шаблонов из темы;
  • измененных шаблонов из базы данных.

Если пользователь сбросит шаблон в редакторе, то снова будет использоваться исходный файл из темы.

Как рендерится HTML

Шаблон block theme - это не обычный HTML. Это HTML с комментариями блоков:

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->

<!-- wp:group {"layout":{"type":"constrained"}} -->
<div class="wp-block-group">
	<!-- wp:post-title /-->
	<!-- wp:post-content /-->
</div>
<!-- /wp:group -->

<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->

WordPress парсит блоки из такого текста и рендерит их.

Упрощенно процесс такой:

  • WordPress находит подходящий шаблон.
  • Получает его содержимое из файла темы (или из базы данных).
  • Парсит HTML блоков (включая template-part).
  • Рендерит блоки.
  • Собирает стили из theme.json, настроек и стилей блоков.
  • Выводит готовую страницу через wp-includes/template-canvas.php.

Динамические блоки рендарятся на сервере. Например core/post-title, core/post-content, core/query, core/navigation и другие блоки получают данные из WordPress во время вывода страницы.

Роль theme.json

theme.json - это конфигурационный файл темы. Он описывает, какие настройки доступны в редакторе и какие стили применяются к сайту и блокам.

Подробнее про него и все его параметры, читайте в отдельной статье.

Важно: theme.json не является самим шаблоном. Он не определяет структуру страницы. Структура лежит в /templates и /parts, а theme.json управляет настройками и стилями.

FSE и классический PHP

FSE не отменяет PHP-шаблоны полностью.

PHP по-прежнему нужен для:

  • хуков и фильтров;
  • регистрации блоков;
  • динамических блоков;
  • подключения скриптов и стилей;
  • кастомной логики темы;
  • интеграции с плагинами;
  • изменения данных перед выводом.

Но основная разметка страницы в block theme теперь хранится не в PHP, а в HTML-шаблонах с блоками.

Что изменилось по сравнению с классической темой

В классической теме разметка собирается PHP-шаблонами:

├─ front-page.php
├─ home.php
├─ single.php
├─ page.php
├─ archive.php
├─ header.php
└─ footer.php

В block theme вместо PHP-разметки используются HTML-шаблоны с блоками:

├─ templates/
│  ├─ front-page.html
│  ├─ home.html
│  ├─ single.html
│  ├─ page.html
│  └─ archive.html
│
└─ parts/
   ├─ header.html
   └─ footer.html

То есть меняется не вся архитектура WordPress, а слой темы:

classic theme: PHP-шаблон → HTML страницы
block theme:   HTML-шаблон с блоками → парсинг блоков → HTML страницы

При этом WordPress остается PHP-приложением. Запрос, WP_Query, хуки, фильтры, плагины и серверный рендеринг блоков продолжают работать как обычно.

Итог

FSE - это шаблонизация сайта на блоках поверх классического PHP-ядра WordPress.

Главная идея такая:

  • PHP-ядро WordPress обрабатывает запрос.
  • Иерархия шаблонов выбирает нужный шаблон.
  • Block theme предоставляет .html шаблон с блоками.
  • WordPress парсит и рендерит блоки.
  • theme.json задает настройки и стили.
  • Редактор сайта позволяет менять шаблоны и стили из админки.

То есть FSE переносит управление структурой сайта из PHP-файлов в систему блоков - в редактор в админке, но не заменяет WordPress-ядро и серверный рендеринг.

2 комментария