Зачем нужны ACF Blocks
Gutenberg — новый блочный редактор WordPress — открывает разработчикам возможность создавать собственные типы блоков. Но вручную создавать блоки крайне сложно: даже простой блок отзывов требует огромного объёма JavaScript-кода.
ACF Blocks решает эту проблему. Теперь можно создавать пользовательские блоки для Gutenberg, используя привычные PHP и HTML вместо сложного JavaScript. Вся тяжёлая работа ложится на плагин — разработчику остаётся только настроить и написать шаблон.
Всего три шага — и блок готов к использованию.
Шаг 1 — Регистрация блока
Регистрация блока напоминает регистрацию типа записи в WordPress. Функция `acf_register_block()` принимает массив настроек: имя, описание, иконка, категория и callback-функция для отрисовки.
add_action('acf/init', 'my_acf_init');
function my_acf_init() {
// проверяем существование функции
if( function_exists('acf_register_block') ) {
// регистрируем блок отзывов
acf_register_block(array(
'name' => 'testimonial',
'title' => __('Отзыв'),
'description' => __('Пользовательский блок для отзывов.'),
'render_callback' => 'my_acf_block_render_callback',
'category' => 'formatting',
'icon' => 'admin-comments',
'keywords' => array( 'отзыв', 'цитата' ),
));
}
}
Параметры настройки аналогичны тем, что принимает JavaScript-функция `registerBlockType()` в WordPress.
Шаг 2 — Создание группы полей
Следующий шаг — создание группы полей в ACF. Ограничений нет: можно использовать любые поля ACF — текстовые, изображения, цвета, select и другие.
В правилах местоположения достаточно выбрать правило «Блок» и указать зарегистрированный тип блока. После этого поля будут отображаться при редактировании блока в Gutenberg.
Шаг 3 — Отрисовка блока
Последний шаг — указать ACF, как отрисовывать блок. Это тот же процесс, что и для обычных полей ACF, только HTML и PHP оборачиваются в функцию.
Callback-функция, указанная в `render_callback`, отвечает за вывод HTML. Рекомендуется использовать модульный подход: подключать шаблонную часть через параметр `$block`.
function my_acf_block_render_callback( $block ) {
// преобразуем имя ("acf/testimonial") в slug ("testimonial")
$slug = str_replace('acf/', '', $block['name']);
// подключаем шаблон из папки "template-parts/block"
if( file_exists( get_theme_file_path("/template-parts/block/content-{$slug}.php") ) ) {
include( get_theme_file_path("/template-parts/block/content-{$slug}.php") );
}
}
Сам шаблон блока:
<?php
/**
* Block Name: Testimonial
*
* Шаблон отображения блока отзывов.
*/
// получаем поле изображения (массив)
$avatar = get_field('avatar');
// создаём id для стилизации
$id = 'testimonial-' . $block['id'];
// создаём класс выравнивания из настроек блока
$align_class = $block['align'] ? 'align' . $block['align'] : '';
?>
<blockquote id="<?php echo $id; ?>" class="testimonial <?php echo $align_class; ?>">
<p><?php the_field('testimonial'); ?></p>
<cite>
<img src="<?php echo $avatar['url']; ?>" alt="<?php echo $avatar['alt']; ?>" />
<span><?php the_field('author'); ?></span>
</cite>
</blockquote>
<style type="text/css">
#<?php echo $id; ?> {
background: <?php the_field('background_color'); ?>;
color: <?php the_field('text_color'); ?>;
}
</style>
Для подключения стилей используются стандартные хуки `admin_enqueue_scripts` и `wp_enqueue_scripts`.
Блоки и метабоксы — в чём разница
ACF Blocks не заменяют метабоксы. Метабоксы по-прежнему остаются важной частью процесса разработки и сохраняют данные как «meta» — отдельные значения в таблице `wp_postmeta`. Разработчик полностью контролирует, где и когда они появляются в шаблонах темы. Это идеальный вариант для сайтов с фиксированной структурой.
Блоки сохраняют данные внутри `post_content` в виде JSON в HTML-комментариях. Пользователь сам решает, где разместить блок в тексте статьи. Это удобно для блогов и контентных страниц.
Благодаря такому подходу блоки можно вставлять многократно, менять порядок, редактировать и удалять — без раздувания таблицы мета.
Режим предпросмотра
Главное преимущество Gutenberg перед классическим редактором — блоки лучше отражают реальный вид страницы. ACF Blocks поддерживает это через режим предпросмотра: достаточно нажать кнопку «Переключить на предпросмотр» в настройках блока.
В этом режиме HTML блока отображается прямо в редакторе, а поля перемещаются в боковую панель. Все изменения обновляются в реальном времени. Для сложных блоков удобнее оставаться в режиме редактирования — там больше рабочего пространства.
Выравнивание блоков
ACF Blocks поддерживает панель выравнивания Gutenberg. Блоки можно выравнивать по центру, влево или вправо, а также использовать режимы «широкий» и «на всю ширину» для выхода за пределы контейнера.
Когда ожидать
ACF Blocks будет включён как в бесплатную, так и в PRO-версию ACF 5.8. Клиенты ACF PRO могут протестировать бета-версию 5.8.0-beta1 уже сейчас — достаточно скачать её из личного кабинета.