Эволюция шорткодов в блоки — WordPress 7.0 (PHP-only block registration)

Команда разработчиков 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' );

Всё сводится к двум вещам:

  1. autoRegister во флагах — сигнал редактору: «я блок, сам меня зарегистрируй»
  2. 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ЧекбоксВкл/выкл
stringenumСелект (выпадающий список)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/

Фото аватара

Antony I

Веб разработчик, специализация на лучших мировых практиках: WordPress, WooCommerce, NextJS, Strapi, JAMStack ...

Основные типы проектов: CMS, eCommerce, SEO, LMS, ECM, BPM

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *