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