PHP-рендеренные блоки Gutenberg — совместимые с acf_register_block_type | Field Forge - Произвольные поля, созданные для скорости
Скачать Войти

PHP-рендеренные блоки Gutenberg — совместимые с acf_register_block_type

Почему PHP-рендеренные блоки?

Gutenberg (редактор блоков WordPress) был разработан вокруг блоков, рендеренных на JavaScript. Вы пишете функцию save() на JS, которая возвращает HTML блока, и WordPress сохраняет этот HTML в содержимом поста. Для простых визуальных блоков это работает отлично.

Но для динамических блоков — «Показать последние 3 блога с пользовательским стилем,» «Отобразить участника команды с данными из профиля текущего пользователя,» «Рендерить сетку продуктов из запроса WooCommerce» — блоки на JavaScript создают проблемы. Вам приходится писать вызовы REST API, управлять состояниями загрузки и восстанавливать логику получения данных, которую WordPress уже умеет делать на PHP.

PHP-рендеренные блоки позволяют вам написать PHP-обработчик, который выполняется во время рендеринга страницы, имеет полный доступ к API данных WordPress (WP_Query, get_field(), get_post_meta() и т.д.) и возвращает HTML напрямую. Проще, быстрее и более идиоматично для WordPress.

ACF представил acf_register_block_type() много лет назад, и он стал де-факто стандартом для разработчиков агентств, создающих пользовательские блоки Gutenberg. Field Forge поддерживает ту же сигнатуру функции, поэтому миграция тривиальна.


Как зарегистрировать PHP блок

Основной пример

«`php // functions.php или пользовательский плагин

add_action(‘acf/init’, ‘register_my_blocks’);

function register_my_blocks() { if (function_exists(‘acf_register_block_type’)) { acf_register_block_type([ ‘name’ => ‘feature-card’, ‘title’ => __(‘Карточка функции’), ‘description’ => __(‘Карточка функции с иконкой, заголовком и описанием.’), ‘render_callback’ => ‘render_feature_card_block’, ‘category’ => ‘theme’, ‘icon’ => ‘star-filled’, ‘keywords’ => [‘feature’, ‘card’], ‘supports’ => [ ‘align’ => [‘wide’, ‘full’], ‘anchor’ => true, ‘color’ => true, ], ]); } }

function render_feature_card_block($block) { $icon = get_field(‘icon’); $title = get_field(‘title’); $description = get_field(‘description’); ?>

<?php } ```

Этот код идентичен коду регистрации ACF. Работает без изменений после миграции.

Регистрация нативного Field Forge

Если вы предпочитаете нативный API Field Forge (для чистоты кода или чтобы избежать намека на необходимость ACF), используйте fieldforge_register_block_type():

«php add_action('init', function() { fieldforge_register_block_type([ 'name' => 'feature-card', 'title' => __('Карточка функции'), 'render_callback' => 'render_feature_card_block', 'category' => 'theme', ]); }); «

Обе функции делают одно и то же. Используйте ту, которая соответствует вашим командам.


Пользовательские поля в блоке

Каждый PHP блок может иметь свою собственную группу полей, назначенную через правила расположения:

« Правила расположения: Блок равен "acf/feature-card" «

Когда редактор добавляет блок в пост, Field Forge рендерит группу полей в боковой панели блока (или встроенно, в зависимости от настроек блока). Редактор заполняет поля, блок автоматически обновляется с живым предварительным просмотром.

Во время рендеринга функция render_callback использует get_field() для доступа к значениям полей:

«`php function render_feature_card_block($block) { // get_field() работает внутри обратных вызовов блока $icon = get_field(‘icon’); $title = get_field(‘title’);

// Массив $block содержит все данные об этом конкретном экземпляре блока $block_id = $block[‘id’]; $is_preview = !empty($block[‘is_preview’]); $block_data = $block[‘data’]; $className = !empty($block[‘className’]) ? $block[‘className’] : »;

// Рендеринг HTML ?>

<div class="feature-card «>

<?php } ```


Поддержка блоков

PHP блоки поддерживают все стандартные функции блоков Gutenberg:

Все настраивается через стандартный API поддержки блоков WordPress.


Режим предварительного просмотра

Когда редактор просматривает блок в редакторе (не на фронтенде), обратный вызов выполняется в «режиме предварительного просмотра»:

«php function render_my_block($block) { if ($block['is_preview']) { // Рендеринг в редакторе echo '

'; render_actual_block($block); echo '

'; } else { render_actual_block($block); } } «

Используйте это для добавления оберток только для редактора, контента-заполнителя, когда поля пусты, или специального стиля предварительного просмотра.


Внутренние блоки

PHP блоки могут содержать другие блоки Gutenberg через InnerBlocks:

«`php acf_register_block_type([ ‘name’ => ‘two-column’, ‘render_callback’ => ‘render_two_column_block’, ‘supports’ => [ ‘inner_blocks’ => true, ], ]);

function render_two_column_block($block) { ?>

<?php } ```

Это позволяет вам создавать повторно используемые блоки макета, которые пользователи могут заполнять любыми основными блоками Gutenberg (параграф, заголовок, изображение и т.д.).


Шаблон блока для начального контента

Предварительно заполняйте блоки с помощью стандартного внутреннего контента:

«php acf_register_block_type([ 'name' => 'three-column', 'render_callback' => 'render_three_column_block', 'template' => [ ['core/columns', [], [ ['core/column', [], [['core/heading', ['content' => 'Столбец 1']]]], ['core/column', [], [['core/heading', ['content' => 'Столбец 2']]]], ['core/column', [], [['core/heading', ['content' => 'Столбец 3']]]], ]], ], ]); «


Миграция кода блока ACF

Каждый вызов acf_register_block_type() в вашей существующей теме работает без изменений, когда активен Field Forge (через слой совместимости). Изменения кода не требуются.

Процесс миграции:

  1. Установите Field Forge вместе с ACF
  2. Запустите импорт группы полей + значений
  3. Деактивируйте ACF
  4. Слой совместимости ACF Field Forge берет на себя управление
  5. Ваши вызовы acf_register_block_type() продолжают работать
  6. Группы полей, назначенные блокам через правила расположения, мигрируют

Большинство сайтов с пользовательскими PHP блоками завершают миграцию, не трогая код регистрации блоков.


Производительность

PHP блоки рендерятся на сервере, поэтому они не добавляют вес JavaScript-бандла. В сочетании с пользовательским хранилищем таблиц Field Forge, поиск значений полей внутри обратных вызовов рендеринга происходит быстро. Страница с 20 пользовательскими блоками работает с меньшим количеством запросов, чем аналогичная настройка на JavaScript.


Сравнение с блоками JavaScript Gutenberg

PHP-рендеренные блоки Блоки JavaScript Gutenberg
Язык PHP JavaScript (React / JSX)
Инструменты сборки Нет Webpack / Vite / wp-scripts
Доступ к динамическим данным Легко (get_field(), WP_Query) Требует вызовов REST API
Опыт разработчика Знакомо PHP-разработчикам Требует навыков JavaScript
Интерактивность на стороне клиента Невозможно Полный жизненный цикл компонента React
Серверный рендеринг Да (по умолчанию) Только динамические блоки
Лучше всего для Контентные блоки, динамические запросы, пользовательские поля Интерактивные виджеты, живое редактирование

PHP блоки и блоки JavaScript не являются взаимоисключающими — используйте оба на одном сайте для разных целей.


Готовы создавать блоки Gutenberg с пользовательскими полями?

Получите Field Forge — от $35/год →

Поддержка PHP блоков включена в каждый платный план.

ИИ-ассистент Forge Онлайн

Привет! Я ИИ-ассистент Field Forge. Спрашивайте меня о чём угодно по плагину — настройка, возможности, устранение неполадок или разработка.

Только что
На базе Forge AI · Просмотр документации