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 · Переглянути документацію