Обзор
Вывод структурированных данных Schema.org из полей блоков ACF.
Описание
Блоки ACF могут автоматически выводить структурированные данные JSON-LD для значений своих полей. Это обеспечивает расширенные результаты поиска и делает содержимое на основе блоков доступным для обнаружения системами ИИ.
Требования
- ACF 6.8 или более поздней версии
- Функция Schema включена через
add_filter( 'acf/settings/enable_schema', '__return_true' );
Настройка
Через block.json
Добавьте свойства autoJsonLd и необязательное schemaType в пространство имён acf:
{
"name": "acf/recipe-card",
"title": "Карточка рецепта",
"category": "formatting",
"acf": {
"mode": "preview",
"autoJsonLd": true,
"schemaType": "Recipe"
}
}Через программную регистрацию
Используйте массив acf при регистрации блока:
acf_register_block_type( array(
'name' => 'recipe-card',
'title' => __( 'Карточка рецепта' ),
'category' => 'formatting',
'acf' => array(
'autoJsonLd' => true,
'schemaType' => 'Recipe',
),
'render_template' => 'blocks/recipe-card.php',
));Свойства
autoJsonLd
(boolean) Включает вывод JSON-LD для этого блока. По умолчанию: false
schemaType
(string|array) Тип или типы Schema.org для блока. Необязательное свойство; ACF может автоматически определить тип на основе сопоставлений полей. Может содержать один тип или массив типов.
Сопоставление полей
Сопоставьте поля блока со свойствами Schema.org в редакторе группы полей:
- Откройте группу полей, назначенную блоку
- Для каждого поля задайте значение параметра Свойство Schema.org
- Сопоставленные значения появятся в выводе JSON-LD блока
Вывод
JSON-LD выводится непосредственно вместе с каждым экземпляром блока во внешней части сайта:
<!-- wp:acf/recipe-card -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Шоколадное печенье",
"prepTime": "PT15M",
"cookTime": "PT12M"
}
</script>
<div class="wp-block-acf-recipe-card">
<!-- Содержимое блока -->
</div>
<!-- /wp:acf/recipe-card -->Несколько блоков
Каждый экземпляр блока выводит собственный скрипт JSON-LD. На страницах с несколькими блоками одного типа для каждого из них создаётся отдельный объект структурированных данных.
Фильтры
Включение JSON-LD для определённых блоков
add_filter( 'acf/ai/block_jsonld_enabled', function( $enabled, $block ) {
// Включить для определённого блока
if ( $block['name'] === 'acf/my-block' ) {
return true;
}
return $enabled;
}, 10, 2 );Изменение данных JSON-LD блока
add_filter( 'acf/schema/block_jsonld_data', function( $data, $block, $post_id ) {
// Добавить пользовательские свойства
$data['custom'] = 'value';
return $data;
}, 10, 3 );Пример: блок рецепта
block.json:
{
"name": "acf/recipe",
"title": "Рецепт",
"acf": {
"autoJsonLd": true,
"schemaType": "Recipe"
}
}Сопоставление полей:
– Название рецепта → name
– Описание → description
– Время подготовки (минуты) → prepTime (формат Duration)
– Время приготовления (минуты) → cookTime (формат Duration)
– Количество порций → recipeYield
– Ингредиенты (Repeater) → recipeIngredient
– Инструкции (Repeater) → recipeInstructions
Вывод:
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Шоколадное печенье",
"description": "Классическое домашнее печенье",
"prepTime": "PT15M",
"cookTime": "PT12M",
"recipeYield": "24 печенья",
"recipeIngredient": [
"2 стакана муки",
"1 стакан сахара",
"1 стакан шоколадных капель"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "Разогрейте духовку до 350°F"
},
{
"@type": "HowToStep",
"text": "Смешайте сухие ингредиенты"
}
]
}Примечания
- JSON-LD не выводится в режиме предварительного просмотра редактора блоков
- Пустые значения полей автоматически исключаются
- JSON-LD блока выводится непосредственно вместе с блоком, а не в
<head> - Каждый блок на странице получает собственный скрипт JSON-LD
- Если поля сопоставлены,
schemaTypeуказывать необязательно: ACF определяет тип автоматически
Обновлено: 30.09.2026