Skip to content

Блоки ​

Блоки на PHP-шаблонах ​

Регистрация из кода:

php
add_action( 'wpff/init', function () {
	wpff_register_block_type( array(
		'name'            => 'hero',
		'title'           => 'Hero',
		'render_template' => get_template_directory() . '/blocks/hero.php',
	) );
} );

Поля блоку назначаются группой полей с правилом размещения «Block».

Шаблон блока получает переменные:

  • $block — настройки и атрибуты блока, включая $block['id'];
  • $content;
  • $is_preview;
  • $post_id;
  • $wp_block;
  • $context.

Внутри шаблона get_field() и have_rows() без $post_id читают данные текущего блока.

block.json ​

Блок можно зарегистрировать через block.json в формате ACF:

json
{
	"apiVersion": 3,
	"name": "acf/testimonial",
	"title": "Testimonial",
	"acf": { "mode": "preview", "renderTemplate": "testimonial.php" }
}

Затем вызовите register_block_type( __DIR__ . '/blocks/testimonial' );. Ключ wpff тоже работает.

Имя без пространства имён получает префикс:

  • wpff_register_block_type( [ 'name' => 'hero' ] ) регистрирует wpff/hero;
  • acf_register_block_type() регистрирует acf/hero, как ACF, чтобы старый контент открывался.

InnerBlocks ​

Чтобы шаблон мог разместить вложенные блоки тегом <InnerBlocks />, задайте 'supports' => [ 'jsx' => true ] или "supports": { "jsx": true } в block.json.

На сайте тег заменяется сохранёнными вложенными блоками, в редакторе — редактируемой областью.

Атрибуты как в ACF, массивы передаются в JSON:

php
<InnerBlocks
	allowedBlocks="<?php echo esc_attr( wp_json_encode( [ 'core/paragraph', 'core/image' ] ) ); ?>"
	template="<?php echo esc_attr( wp_json_encode( [ [ 'core/paragraph', [ 'placeholder' => 'Текст…' ] ] ] ) ); ?>"
	templateLock="false"
/>

Block Bindings ​

Источник wpff/field выводит значение поля в стандартных блоках без шаблона. Нужен WordPress 6.5+, а для превью значений в редакторе — 6.7+.

У поля должна быть включена настройка «Allow in Block Bindings» ('allow_in_bindings' => 1). По умолчанию она выключена, чтобы служебные поля случайно не попали на сайт.

html
<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"wpff/field","args":{"key":"subtitle"}}}}} -->
<p></p>
<!-- /wp:paragraph -->

Для полей изображений и ссылок:

  • атрибут url получает адрес;
  • alt и title получают соответствующие части значения.

Значения выводятся только для записей, которые посетитель может читать.

GPL-2.0-or-later. Проект не связан с ACF и WP Engine.