← Все статьи

WordPress 7.0: блоки только на PHP — без React и сборки

Флаг autoRegister в WordPress 7.0: регистрация блока одним PHP, автогенерация JS для редактора — и жёсткие ограничения для интерактива.

WordPress 7.0: блоки только на PHP — без React и сборки
Содержание

Коротко

Через семь с половиной лет после появления блоков в ядре WordPress 7.0 позволяет зарегистрировать кастомный блок только на PHP — без React, npm и пайплайна сборки. Ключ — supports.autoRegister: ядро само генерирует клиентскую регистрацию и превью в редакторе. На CSS-Tricks разбирают пример Hello World, атрибуты и почему этот путь не заменяет полноценную JS-разработку блоков.

Что произошло

Обычный блок регистрируют дважды: в PHP и в JavaScript. Новый режим оставляет один вызов register_block_type с render_callback и флагом 'autoRegister' => true. Редактор показывает HTML с сервера: при смене настроек превью запрашивается заново через REST.

Атрибуты описывают в PHP (string, number, boolean) — в боковой панели настроек появляются базовые поля. Отдельный React-интерфейс для боковой панели писать не нужно.

Архитектура простая, но за ней — жёсткие границы: блок в редакторе не живёт внутри единого клиентского приложения редактора. Разметка подменяется асинхронно, поэтому интерактив внутри превью и надёжная работа с узлами разметки почти невозможны.

Почему это важно

Многие команды до сих пор на классических темах из‑за устаревшего PHP: шорткоды, виджеты, кастомные шапки. Переезд на блочные темы упирался в React и сборку. Регистрация только на PHP снимает оба барьера для миграции: перенести рабочий серверный код в блок за часы, а не переписывать всё на JS.

Для новых интерактивных блоков путь слабый: нет редактирования «на месте» в превью, нет загрузки картинок и многострочного форматированного текста в боковой панели, нет свежих данных из клиентского хранилища редактора (заголовок записи в блоке на PHP останется из БД, пока не сохраните и не перезагрузите). Контекст текущей записи через глобалы цикла в превью через REST тоже не гарантирован — это архитектурное ограничение на момент 7.0.

Итоговая формула автора: инструмент ценен как мостик к блочным темам, а не как замена JavaScript-блокам с нуля.

На практике

  1. Берите регистрацию только на PHP для виджетов, шорткодов, шапки/подвала и всего, что на фронте уже работает без правок в редакторе.
  2. Не ждите идеального превью: достаточно «понятно на фронте»; в редакторе допустим плейсхолдер, как у блока содержимого записи.
  3. Стили — через style / editor_style и get_block_wrapper_attributes(); скрипты — только view_script на фронт.
  4. Отличить превью редактора от фронта: wp_is_rest_endpoint() плюс проверка маршрута block-rendereris_admin() здесь не сработает.
  5. Обходите отсутствие идентификатора записи осторожно (атрибут local с $_GET['post'] при регистрации) — для новых черновиков он появится только после сохранения и полной перезагрузки.
  6. Типы атрибутов сейчас три; выпадающий список без пар «подпись → значение» — для категорий лучше не хранить только ярлык (slug), если его переименуют.

Итог

WordPress 7.0 закрывает давний разрыв: разработчик на PHP может встроить устаревший код в блочную тему без React. Цена — урезанный опыт в редакторе и устаревшие данные в превью. Для миграции — сильный рычаг; для сложного нового блока — по-прежнему JavaScript.