Описание
Обновляет значение определённого дочернего поля.
Эту функцию можно использовать внутри или вне цикла have_rows(). При использовании внутри цикла для обновления значения дочернего поля будет использована текущая строка. При использовании вне цикла необходимо указать строки и родительские поля, чтобы выбрать правильное место для значения.
Параметры
update_sub_field($selector, $value, [$post_id]);$selector(string|array) (Обязательный) Имя или ключ дочернего поля либо массив родительских элементов и номеров строк.$value(mixed) (Обязательный) Новое значение.$post_id(mixed) (Необязательный) ID записи, в которой сохраняется значение. По умолчанию используется текущая запись.
Результат
(bool) Возвращает true при успешном обновлении и false при ошибке.
Журнал изменений
- Добавлена в версии 5.0.0
Примеры
Обновление дочернего поля внутри цикла have_rows()
В этом примере показано, как пройти по полю Repeater и обновить значение одного из его дочерних полей, используя номер текущей строки.
if( have_rows('repeater') ) {
$i = 0;
while( have_rows('repeater') ) {
the_row();
$i++;
update_sub_field('caption', "Эта подпись находится в строке {$i}");
}
}Обновление дочернего поля вне цикла have_rows()
В этом примере показано, как обновить значение дочернего поля вне цикла have_rows(). Здесь параметру $selector передаётся массив, содержащий комбинацию имён полей и номеров строк. Этот массив должен читаться слева направо: отношения от родительских элементов к дочерним разделяются номерами строк.
Обратите внимание на примечания об индексации строк.
// Обновить «caption» в первой строке «repeater».
update_sub_field( array('repeater', 1, 'caption'), 'Эта подпись предназначена для первой строки repeater!' );Обновление вложенного дочернего поля
Функцию update_sub_field() также можно использовать для обращения к вложенному дочернему полю внутри и вне цикла have_rows(). В этом примере показано, как обновить вложенное дочернее поле обоими способами.
// Цикл по родительским строкам.
if( have_rows('repeater') ) {
$parent_i = 0;
while( have_rows('repeater') ) {
the_row();
$parent_i++;
// Цикл по дочерним строкам.
if( have_rows('sub_repeater') ) {
$child_i = 0;
while( have_rows('sub_repeater') ) {
the_row();
$child_i++;
// Обновить значение вложенного дочернего поля со ссылкой на индексы родительской и дочерней строк.
update_sub_field('sub_sub_field', "Это значение предназначено для строки repeater {$parent_i} и строки sub_repeater {$child_i}");
}
}
}
}
// Напрямую обратиться к вложенному дочернему полю.
update_sub_field( array('repeater', 1, 'sub_repeater', 2, 'sub_sub_field'), 'Это значение предназначено для строки repeater 1 и строки sub_repeater 2!' );Примечания
Смещение индекса
При обращении к дочернему полю с использованием определённого номера строки обратите внимание, что нумерация строк начинается с 1, а не с 0. Это означает, что первая строка имеет индекс 1, вторая — индекс 2 и так далее.
Чтобы начать нумерацию индексов с 0, используйте настройку row_index_offset следующим образом.
functions.php
add_filter('acf/settings/row_index_offset', '__return_zero');Обновлено: 30.09.2026