delete_sub_field() — удаление значения подполя

Описание

Удаляет значение указанного подполя.

Эту функцию можно использовать внутри или вне цикла 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