Создание блоков Gutenberg с помощью ACF и PHP (без block.json)

Создание блоков 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, чтобы убедиться, что все типы постов и поля зарегистрированы к моменту вызова.

С данным подходом можно легко автоматизировать массовую регистрацию блоков.