Обзор
Поле Clone позволяет выбирать и отображать существующие поля. Оно не дублирует поля в базе данных. Вместо этого оно загружает и отображает выбранные поля во время выполнения.
Также можно выбрать одну или несколько групп полей, что позволяет загружать группы «модулей». Хороший пример этого показан в демонстрационном видео ниже: для информации о «кнопке» создаётся отдельная группа полей. Затем эта группа клонируется, когда требуется кнопка.
Поле Clone можно использовать одним из двух способов. Оно может заменить себя выбранными полями (бесшовный режим) или отображать выбранные поля как группу вложенных полей.
Демонстрация
Подробнее см. в нашем руководстве по использованию поля Clone.
История изменений
- Добавлено в версии 5.4.0
Настройки
| Название | Описание |
|---|---|
| Fields | Массив полей или групп для клонирования. |
| Display | Укажите способ отображения клонированных полей.
|
| Layout | Изменяет стиль макета.
|
| Prefix Field Labels | Эта настройка изменяет метки всех выбранных полей, добавляя перед ними метку текущего поля Clone. Особенно полезна при использовании режима «Seamless». Можно назвать поле Clone «Hero», и тогда оно будет добавлено перед метками всех выбранных полей: «Hero Button Text», «Hero Button URL» и т. д. |
| Prefix Field Names | Аналогично предыдущей настройке, но изменяет имя поля. Имя используется для сохранения и загрузки значений. Особенно полезна при использовании режима «Group». Можно несколько раз клонировать группу на одном экране редактирования, но сохранять данные под разными именами, например: «hero_button_text», «welcome_button_text» и т. д. |
Использование в шаблонах
Загрузка значения клонированного поля выполняется так же, как загрузка обычного поля. При использовании настройки отображения «Group» также можно загрузить все клонированные значения в виде массива, загрузив само поле Clone.
В некоторых следующих примерах используется поле Clone с именем «main_button», которое клонирует группу полей с именем «Button». Группа полей Button содержит два поля: «text» и «url».
Базовый пример
В этом примере показано, как загрузить значение поля Clone со следующими настройками по умолчанию. Обратите внимание: эти настройки фактически заменяют поле Clone выбранными полями:
- Имя: main_button
- Отображение: seamless
- Префиксы имён: нет
- Поля: группа полей с именем «Button», описанная выше
<?php
$text = get_field('text');
$url = get_field('url');
?>Префиксы имён полей
В этом примере показано, как загрузить значение поля Clone со следующими настройками «Group». Обратите внимание: эти настройки отображают поля «button» внутри группы и добавляют префикс к именам полей. Все значения будут сохраняться и загружаться с префиксом имени main_button_.
- Имя: main_button
- Отображение: group
- Префиксы имён: да
- Поля: группа полей с именем «Button», описанная выше
<?php
$text = get_field('main_button_text');
$url = get_field('main_button_url');
?>Настройка отображения «Group» позволяет ACF загрузить значения клонированного поля в виде массива:
<?php
$button = get_field('main_button');
$text = $button['text'];
$url = $button['url'];
?>Вложенные поля
Поля Clone также можно использовать внутри полей Repeater или Flexible Content. В этом примере используется то же поле Clone «main_button» из предыдущего примера, но теперь оно находится внутри поля Repeater.
<?php
if( have_rows('slides') ) {
while( have_rows('slides') ) {
// увеличиваем номер строки
the_row();
// переменные
$button = get_sub_field('button');
// ...
}
}
?>Ограничения
У поля Clone есть несколько ограничений. Они проявляются в особых случаях при использовании полей Clone внутри полей Repeater или Flexible Content.
Несколько клонированных вложенных полей
Клонированное вложенное поле может не сохранить своё значение, если оно существует рядом с другим экземпляром самого себя. Например, представьте поле Repeater с именем «Row», содержащее два поля Clone, оба клонирующие одно и то же поле с именем «Cell». Даже если оба поля Clone используют настройку «Prefix Name», чтобы каждое поле «Cell» имело уникальное имя, они используют один и тот же field_key, поэтому при сохранении будут перезаписывать друг друга.
Использование функции have_rows() с вложенным полем Clone
Функция have_rows() вернёт false при загрузке клонированного вложенного поля с настройкой отображения «Group» и макетом «Block». Обратите внимание: при использовании настройки отображения «Seamless» вложенные циклы have_rows() будут работать ожидаемым образом.
Примечания
Структура данных
Поле Clone не изменяет структуру данных при сохранении значений в базе данных. Единственное изменение связано с настройкой «Prefix Field Names». Значения сохраняются не в виде массива, а как обычные значения отдельных полей. Это означает, что метазапросы можно использовать как обычно.
Конфликты данных
При клонировании поля с именем, которое уже используется в группе, могут возникнуть конфликты данных. Это та же проблема, что и при создании двух полей с одинаковым именем. При необходимости используйте настройку «Prefix Field Names», чтобы избежать конфликтов.
Как правило, настройку «Prefix Field Names» следует использовать при выборе режима отображения «Group» и не использовать при выборе режима отображения «Seamless».
Отключённые группы полей
Можно клонировать группу полей, для которой установлено состояние «Disabled». Отключение группы полей не позволяет загружать её на странице редактирования записи, что удобно при создании групп модулей.
Клонирование клона
Можно клонировать поле Clone. Это может показаться избыточным, но в некоторых сценариях такая возможность полезна. Например, вы создаёте конструктор страниц с помощью поля Flexible Content и обнаруживаете, что каждый макет содержит один и тот же набор полей «настроек». Вместо дублирования этих полей в каждом макете и необходимости поддерживать изменения в нескольких макетах можно определить все поля «настроек» только в первом макете. Второй макет может использовать поле Clone для клонирования этих полей «настроек». Третий макет может использовать поле Clone для клонирования поля, определённого во втором макете.
Преимущество заключается в том, что при добавлении новой «настройки» в первый макет достаточно обновить поле Clone во втором макете. Все остальные поля Clone (в макетах 3, 4 и т. д.) унаследуют это изменение и покажут новое поле «настройки»!
Обновлено: 30.09.2026