acf_get_field_groups()

Описание

Получает все группы полей ACF, отфильтрованные аргументами WP_Query, и возвращает их в виде массива.

Не следует путать эту функцию с get_fields(), которая возвращает массив значений полей для определённой записи, get_field_objects(), которая возвращает все поля и их настройки, но не разделяет их по группам полей, или acf_get_fields(), которая получает все поля из определённой группы полей.

Параметры

acf_get_field_groups( $filter );
  • $filter (array) (Необязательно) Массив аргументов для фильтрации запроса записей.

Примеры

Базовое использование

В этом примере показано, как вернуть все группы полей, связанные с ID записи, в виде массива. Функция получает все группы полей, фильтрует их, а затем проверяет правила расположения для каждой группы полей.

ID записи необходимо передать в качестве аргумента, иначе группы полей возвращены не будут. Замените $post_id фактическим ID записи.

$groups = acf_get_field_groups( array( 'post_id' => $post_id ) );

Расширенное использование

В этом примере показано, как динамически получать группы полей на основе типа записи и шаблона текущей страницы, а затем использовать полученные группы полей для создания пользовательского макета страницы на основе групп полей, назначенных записи.

Предположим, у вас есть пользовательский тип записи с именем «portfolio» и вы хотите отображать отдельный макет для каждого элемента портфолио в зависимости от назначенных ему групп полей. Для получения групп полей можно использовать acf_get_field_groups(), а затем перебрать их в цикле, чтобы создать пользовательский макет.

// Получить ID текущей записи
$post_id = get_the_ID();

// Получить все группы полей, связанные с текущей записью
$field_groups = acf_get_field_groups(array('post_id' => $post_id));

// Перебрать каждую группу полей
foreach ($field_groups as $field_group) {
    // Получить ID группы полей
    $field_group_id = $field_group['ID'];

    // Получить поля внутри группы полей
    $fields = acf_get_fields($field_group_id);

    // Проверить, есть ли у группы полей определённый макет
    if ($field_group['layout'] == 'gallery') {
        // Перебрать каждое поле и отобразить макет галереи
        foreach ($fields as $field) {
            if ($field['type'] == 'gallery') {
                // Отобразить поле галереи
                the_field($field['name']);
            }
        }
    } elseif ($field_group['layout'] == 'video') {
        // Перебрать каждое поле и отобразить макет видео
        foreach ($fields as $field) {
            if ($field['type'] == 'video') {
                // Отобразить поле видео
                the_field($field['name']);
            }
        }
    }
}

В этом примере сначала с помощью get_the_ID() получается ID текущей записи. Затем с помощью acf_get_field_groups() мы получаем все группы полей, связанные с текущей записью. Мы перебираем каждую группу полей и получаем содержащиеся в ней поля с помощью acf_get_fields(). Наконец, мы проверяем макет каждой группы полей и отображаем соответствующий макет на основе типов полей внутри группы.

Примечания

Соблюдайте осторожность при использовании этой функции, поскольку ACF использует ту же функцию для получения групп полей и полей.

Функция кэширует результаты, поэтому поля не требуется получать из базы данных при каждом обращении. Однако, поскольку значения кэшируются, изменения в них не обновляются. Если после вызова этой функции вы хотите изменить настройки группы полей или поля, необходимо вручную очистить кэшированные версии.

Обновлено: 30.09.2026