Обзор
Эта функция обновляет значение существующего подполя. Если используется в цикле have_rows(), текущая строка будет использоваться для удаления значения подполя. Если используется вне цикла have_rows(), идентификаторы строк и родителей могут быть указаны для задания правильного значения подполя.
История изменений
- Добавлено в v5.0.0
Параметры
update_sub_field( $selector, $value, $post_id );
- $selector (смешанный) (обязательное) Имя или ключ подполя, или массив родителей и номера строки.
- $value (массив) (обязательное) Новое значение
- $post_id (число) ID поста для которого будет сохраняться значение.
Возвращает
Функция возвращает true в случае успеха и false при неудаче.
Примечания
- Строки начинаются с 1 (не с 0). К примеру, первая строка значений будет $i = 1
- Можно изменить индекс с которого начинаются строки. Для этого воспользуйтесь row_index_offset.
Примеры
Внутри цикла have_rows()
В этом примере будет совершен обход полей повторителя и обновление подполя, используя текущий номер строки в качестве значения. В этом примере показывается, как использовать функцию update_sub_field() внутри цикла have_rows().
<?php
if( have_rows('repeater') ) {
$i = 0;
while( have_rows('repeater') ) {
the_row();
$i++;
update_sub_field('caption', "Это описание хранится в строке под номером {$i}");
}
}
?>
Вне цикла have_rows()
В этом примере будет обновлено значение подполя вне цикла have_rows(). Обратите внимание, что параметру $selector присваивается массив, содержащий комбинацию имен полей и номеров строк. Этот массив должен читать слева направо, отношения родителей с детьми, дополненные номером строки.
В этом примере будет обновлено подполе в первой строке поля повторителя.
<?php
update_sub_field( array('repeater', 1, 'caption'), 'Это описание хранится в первой строке повторителя!' );
?>
Вложенные поля повторителя
Функция update_sub_field() будет корректно работать с вложенными полями повторителя как внутри, так и вне цикла have_rows(). Пример покажет, как обновить данные для обоих случаев.
<?php
// повторитель родитель
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}");
}
// while
}
// if
}
// while
}
// if
?>
<?php
update_sub_field( array('repeater', 1, 'sub_repeater', 2, 'sub_sub_field'), 'Это описание хранится в строке repeater под номером 1, и в подстроке sub_repeater под номером 2!' );
?>
Похожие
- Функция: update_sub_row()
- Функция: add_sub_row()
- Функция: delete_sub_row()
- Функция: delete_sub_field()