← Усі статті

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.