Регистрация полей ACF через код

Я очень часто, если пользуюсь ACF/SCF, то регистрирую поля через код. На самом сайте ACF есть небольшая заметка о том, как это сделать: https://www.advancedcustomfields.com/resources/register-fields-via-php/

Если коротко, то добавление полей происходит через функцию acf_add_local_field_group($args), которая принимает в себя массив аргументов, который я постоянно забываю и из-за чего я и решил написать эту заметку 😅

Пример аргументов для группы полей с пояснениями

acf_add_local_field_group(array(
    'key' => 'group_1234567890abc', // (string) Уникальный ключ группы (обязателен).
    'title' => 'Название группы',   // (string) Заголовок группы (обязателен).

    // (array) Массив полей (каждое поле задаётся через массив аргументов).
    'fields' => array(

      // Базовое текстовое поле
      array(
        // Базовые параметры
        'key' => 'field_1234567890def', // (string) Уникальный ключ поля (обязателен)
        'label' => 'Заголовок поля',    // (string) Подпись к полю (обязателен)
        'name' => 'custom_text',        // (string) Имя (slug) для сохранения метаданных (обязателен)
        'type' => 'text',               // (string) Тип поля (обязателен)

        // Информационные
        'instructions' => 'Введите текст', // (string) Подсказка под полем
        'required' => 0,                   // (int|bool) Обязательно: 1 | 0
        'conditional_logic' => 0,          // (mixed) Логика отображения (false | array правил)

        // Вёрстка
        'wrapper' => array(                // (array) HTML-атрибуты контейнера
            'width' => '',                 // (string) ширина (%)
            'class' => '',                 // (string) CSS класс
            'id' => '',                    // (string) HTML id
        ),

        // Настройки поля (специфично для text)
        'default_value' => '',             // (string) Значение по умолчанию
        'placeholder' => 'Например: Иванов', // (string) Placeholder
        'prepend' => '',                   // (string) Текст перед input
        'append' => '',                    // (string) Текст после input
        'maxlength' => '',                 // (int) Максимальная длина текста

        // REST API
        'show_in_rest' => 0,               // (bool|int) Показывать ли поле в REST API (ACF 5.11+)

        // Для экспорта / системные
        'aria-label' => '',                // (string) Альтернативная подпись для screen readers
      ),

    ),

    // Условия отображения
    // (array) Массив правил отображения группы (например, пост тип = post).
    'location' => array(
      array (
        array (
            'param' => 'post_type',
            'operator' => '==',
            'value' => 'post',
        ),
      ),
    ),

    // Настройки
    'menu_order' => 0,              // (int) Порядок вывода группы на экране редактирования.
    'position' => 'normal',         // (string) normal | side | acf_after_title.
    'style' => 'default',           // (string) default | seamless.
    'label_placement' => 'top',     // (string) top | left – расположение лейблов.
    'instruction_placement' => 'label', // (string) label | field – расположение инструкций.
    'hide_on_screen' => '',         // (array|string) Какие стандартные блоки WordPress скрыть (см. ниже).
    'active' => true,               // (bool) Включена ли группа.
    'description' => '',            // (string) Описание группы.
    'show_in_rest' => 0,            // (bool|int) Показывать ли группу в REST API (ACF 5.11+).
));

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