Команда разработчиков WordPress Core представила важное обновление, которое существенно упрощает процесс регистрации блоков — теперь это можно делать исключительно средствами PHP, без необходимости создавать файл block.json.
По сути это мост между старыми добрыми шорткодами и современным блочным редактором. Если раньше шорткод был отдельной сущностью, то теперь тот же render_callback можно обернуть в блок одним флагом — и он появится в редакторе как полноценный блок.
Пример регистрации блока с использованием нового подхода:
function gutenberg_register_php_only_blocks() {
register_block_type(
'my-plugin/example',
array(
'title' => __( 'My Example Block', 'myplugin' ),
'attributes' => array(
'title' => array(
'label' => __( 'Title', 'myplugin' ),
'type' => 'string',
'default' => 'Hello World',
),
'count' => array(
'label' => __( 'Count', 'myplugin' ),
'type' => 'integer',
'default' => 5,
),
'enabled' => array(
'label' => __( 'Enabled?', 'myplugin' ),
'type' => 'boolean',
'default' => true,
),
'size' => array(
'label' => __( 'Size', 'myplugin' ),
'type' => 'string',
'enum' => array( 'small', 'medium', 'large' ),
'default' => 'medium',
),
),
'render_callback' => function ( $attributes ) {
return sprintf(
__( '<p>%s: %d items (%s)</p>', 'myplugin' ),
esc_html( $attributes['title'] ),
$attributes['count'],
$attributes['size']
);
},
'supports' => array(
'autoRegister' => true,
),
)
);
}
add_action( 'init', 'gutenberg_register_php_only_blocks' );
Всё сводится к двум вещам:
autoRegisterво флагах — сигнал редактору: «я блок, сам меня зарегистрируй»render_callback— серверная функция, которая возвращает HTML
Что такое PHP-only регистрация блоков?
Традиционно регистрация блоков в WordPress требовала наличия файла block.json, который описывал метаданные блока: название, атрибуты, категорию, иконку и другие параметры. Начиная с нового подхода, разработчики получают возможность передавать все необходимые параметры напрямую через функцию register_block_type() в PHP-коде, минуя создание отдельного JSON-файла.

Ключевые преимущества нового подхода
- Упрощение структуры проекта — не нужно поддерживать отдельный
block.jsonфайл для простых блоков, особенно при серверном рендеринге. - Динамическая конфигурация — параметры блока можно формировать динамически в зависимости от настроек плагина, роли пользователя или других условий во время выполнения.
- Удобство для PHP-разработчиков — разработчики, работающие преимущественно с серверной частью, получают более привычный инструментарий без необходимости углубляться в экосистему JavaScript/Node.js.
- Ускорение прототипирования — быстрее создавать и тестировать блоки без настройки системы сборки.
- Совместимость — новый подход полностью совместим с существующей экосистемой WordPress и не ломает обратную совместимость.
Fields API: как это устроено внутри
Редактор автоматически генерирует контролы в Inspector Controls (боковая панель) на основе атрибутов:
| Тип поля | Что получит пользователь | Пример |
|---|---|---|
string | Текстовое поле | Заголовок, текст |
integer | Числовое поле | Счётчик, лимит |
number | Числовое поле (float) | Цена, процент |
boolean | Чекбокс | Вкл/выкл |
string • enum | Селект (выпадающий список) | small / medium / large |
Mark Wilkinson спрашивал: «А как же загрузка изображений и файлов?»
Miguel Fonseca ответил: «Пока поддерживаются только string, number, integer, boolean. Атрибуты также не должны быть «sourced».»
Это важное ограничение текущей версии — но сама инфраструктура уже есть, и расширять будут.
Под капотом WordPress 7.0 использует DataForm/Fields — ту же систему, которая скоро станет основой для нового интерфейса редактора.
Вот что происходит:
- PHP-блоки с
autoRegisterпопадают в глобальный объектautoRegisterBlocksв настройках редактора - Преview рендерится через
ServerSideRender - Inspector-контролы билдятся из схемы атрибутов через Fields-инфраструктуру
- Все изменения отправляются на сервер и обновляют превью
По сути, вы описываете поля как атрибуты — а WordPress строит UI самостоятельно.
Если сравнивать с шорткодами — все стало сильно богаче и удобней. Но если нужно еще богаче и удобней — то это упрощение не катит и надо использовать типовые блоки на JS/ReactJS.
Когда использовать PHP-only регистрацию?
Новый метод особенно актуален в следующих сценариях:
- Создание динамических блоков, которые полностью рендерятся на сервере.
- Разработка простых блоков без сложной логики на стороне редактора.
- Ситуации, когда конфигурация блока зависит от данных базы данных или настроек плагина.
- Быстрое создание прототипов и MVP без настройки инфраструктуры сборки JavaScript.
Сравнение с традиционным подходом через block.json
Важно понимать, что PHP-only регистрация — это дополнение, а не замена существующего подхода. Файл block.json по-прежнему остаётся рекомендованным способом для полноценных блоков с богатым редакторским интерфейсом, поскольку он обеспечивает:
- Автоматическую регистрацию скриптов и стилей.
- Поддержку интернационализации строк напрямую из JSON.
- Лучшую интеграцию с инструментами разработки, такими как
@wordpress/scripts. - Статический анализ и документирование API блока.
Технические детали реализации
Согласно обсуждению в GitHub Pull Request #8552, изменения затрагивают внутреннюю логику функции register_block_type() и связанных хелперов. Разработчики Core позаботились о том, чтобы новый способ регистрации корректно обрабатывал все стандартные параметры блока, включая атрибуты, supports, стили и скрипты.
Официальная документация по регистрации блоков в Block Editor Handbook уже обновлена с учётом нового подхода и содержит подробные примеры использования.
Что это значит для разработчиков плагинов и тем?
Для команд, разрабатывающих плагины с большим количеством блоков, новая возможность может значительно упростить кодовую базу. Вместо поддержки множества JSON-файлов можно централизованно управлять регистрацией блоков через PHP, используя циклы, условные операторы и другие возможности языка.
Разработчикам тем это нововведение также будет полезно при создании тематических блоков, параметры которых зависят от настроек кастомайзера или опций темы.
Итог
PHP-only регистрация блоков — это шаг навстречу разнообразным сценариям разработки в экосистеме WordPress. Команда Core продолжает работу по снижению порога вхождения и предоставлению разработчикам гибких инструментов.
Источник: https://make.wordpress.org/core/2026/03/03/php-only-block-registration/