Создание блоков Gutenberg с помощью ACF и PHP (без block.json)
Создание собственных Gutenberg-блоков для WordPress — это мощный способ адаптировать редактор под задачи проекта. Один из самых простых и гибких способов реализовать блоки — использовать плагин Advanced Custom Fields (ACF). В этой статье мы рассмотрим, как создать блок полностью через PHP, без использования block.json.
Почему стоит использовать ACF для создания Gutenberg-блоков
- Простота: всё можно сделать в коде без сборщиков или React.
- Гибкость: можно использовать любые поля ACF.
- Поддержка условий, логики, шаблонов.
- Совместимость с существующими редакторами WordPress.
Регистрация ACF-блока через PHP
Всё начинается с вызова acf_register_block_type() — функции, которая позволяет зарегистрировать блок, указав его название, описание, шаблон рендера и другие параметры.
Давайте зарегистрируем блок с названием acf/main-cat-posts и шаблоном рендера render.php.
Добавление полей ACF к блоку
Для блока мы можем определить отдельную группу полей ACF. Это делается через acf_add_local_field_group().
Вы можете использовать любые поля ACF: select, checkbox, text, taxonomy, group, repeater и другие. Поддерживаются условия отображения, значения по умолчанию и прочее.
Структура регистрируемого блока
С кодом будет удобней работать, если оформить регистрацию блока в класс:
Такой подход делает код читаемым и легко масштабируемым.
Преимущества подхода
- Нет зависимости от block.json — весь контроль в PHP.
- SEO-совместимый: блоки можно рендерить через PHP, не полагаясь на JavaScript.
- Легко управлять шаблонами — достаточно подключить
render.phpс нужным HTML и логикой. - Управляемые поля — можно добавлять, удалять, изменять поля прямо из кода.
Заключение
Создание блоков для WordPress с помощью ACF и PHP — это мощный и простой способ адаптировать редактор под нужды сайта. Вы можете быстро внедрять блоки, управлять их параметрами через ACF и использовать любую HTML-структуру для рендера. Этот подход особенно хорош для тех, кто предпочитает минимальную зависимость от JS/React.
Совет: используйте
acf/init, а неacf/include_fields, чтобы убедиться, что все типы постов и поля зарегистрированы к моменту вызова.
С данным подходом можно легко автоматизировать массовую регистрацию блоков.