acf_get_field_groups() — получить группы полей ACF

Описание

Получает все группы полей 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», и вы хотите отображать разный макет для каждого элемента 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']);
            }
        }
    }
}

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

Примечания

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

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

Обновлено: 01.06.2026