Я очень часто, если пользуюсь 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+).
));
Понятное дело, что большинство параметров как группы, так и полей можно не указывать, так как мы никак их не переопределяем. Но если вдруг переопределить надо, то полезно вспомнить об этой шпаргалке 😀
