Описание
Получает все группы полей 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