Блоки
Блоки на 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:
{
"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:
<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). По умолчанию она выключена, чтобы служебные поля случайно не попали на сайт.
<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"wpff/field","args":{"key":"subtitle"}}}}} -->
<p></p>
<!-- /wp:paragraph -->Для полей изображений и ссылок:
- атрибут
urlполучает адрес; altиtitleполучают соответствующие части значения.
Значения выводятся только для записей, которые посетитель может читать.