Поля в Carbon fields являются строительным блоком каждого контейнера. Новое поле создается с помощью метода make Field:: make( $type, $name, $label = null), где:
$type – тип поля.
$name — имя поля. Используется в качестве ключа при хранении в базе данных и для получения его значения. Обратите внимание, что все поля имеют свои имена автоматически с префиксом подчеркивания при хранении (например, bgcolor становится _bgcolor).
$label (необязательно) — метка поля отображается только в фоновом режиме, где виден контейнер. Если параметр опущен, он автоматически выводится из $name, если этот параметр опущен, и $name начинается с crb_, часть crb не будет отображаться в сгенерированной метке.
Примеры
// Создать поле изображения с именем «customer_photo» и меткой » Photo »
Field::make( 'image', 'crb_customer_photo', 'Photo' )
// Метод цепочки
Field::make( 'select', 'crb_color' ) -> add_options( array('red', 'blue', 'green') ) -> set_help_text( 'Pick a color' )
Все типы полей происходят из одного класса с именем Field и наследуют следующие основные функции:
Значение по умолчанию
Можно назначить значение по умолчанию для каждого поля в каждом контейнере. Значение по умолчанию используется, когда в настоящее время нет значения для конкретного поля в базе данных. Это происходит, например, при добавлении новой записи или нового поля параметров темы в существующий контейнер.
Чтобы назначить значение по умолчанию, используйте:
Field::make(…)->set_default_value( $default_value )
Например
->add_fields( array( Field::make( 'text', 'crb_title',__( 'Title' ) ) ->set_default_value( "value" ) // по умолчанию
Требуемые поля
Вы можете пометить любое поле по мере необходимости, в этом случае пользователю необходимо будет заполнить его перед отправкой. Чтобы задать необходимое поле, используйте:
Field::make(…)->set_required( true )
Вот полная запись:
Container::make( 'theme_options', __( 'Customize Background' ) ) ->add_fields( array( Field::make( 'text', 'crb_title',__( 'Title' ) ) ->set_default_value( "value" ) ->set_required( true ) ) );
Текст справки
Текст справки используется как подсказка пользователю, который будет использовать поле. Он обычно отображается под полем и содержит больше информации о том, что он должен содержать – требования, примеры, ссылки и т. д. HTML теги разрешены.
Текст справки добавляется с помощью:
Field::make(…)->set_help_text( $text )
Ширина
Вы можете установить ширину полей, которые находятся рядом друг с другом, и они будут выровнены по одной строке. Чтобы задать ширину поля в %, используйте:
Field::make(…)->set_width( 50 )
Например
Field::make( 'text', 'crb_title',__( 'Title' ) ) ->set_default_value( "value" ) ->set_required( true ) ->set_width( 80 ) , Field::make( 'text', 'crb_title1',__( 'Title1' ) ) ->set_width( 20 ) ,
Классы
Пользовательские классы полей могут быть добавлены с помощью метода set_classes (), например:
Field::make(...)->set_classes( 'my-custom-class' )
Атрибуты
Некоторые атрибуты полей можно переопределить с помощью метода set_attribute() полей на основе <input> и <textarea>:
Field::make( 'text', 'crb_phone', 'Phone' ) -> set_attribute( 'placeholder', '(***) ***-****' );
Условная логика
Вы можете применить условную логику к полю, используя set_conditional_logic( $rules ), чтобы показать или скрыть его на основе других полей в том же контейнере. Синтаксис аналогичен meta_query.
Условные правила передаются в двумерном массиве, и каждое правило может иметь следующие аргументы в виде пар ключ=>значение:
Ключ | Описание | Тип | Знач-е по умолчанию | Обязательный |
field | Имя поля, к которому применяется правило. Имя должно быть таким же, как определено в контейнере. | string | — | Yes |
value | Значение поля. Это может быть массив только тогда, когда compare это IN, NOT IN, INCLUDES or EXCLUDES. | String или array | «» | No |
compare | Оператор для проверки. Возможные значения: =, <, >, <=, >=, IN, NOT IN, INCLUDES, EXCLUDES. | string | = | No |
При необходимости можно передать ключ связи и задать для него значение AND (по умолчанию) или OR. Он определяет отношение, когда существует более одного правила.
Например, сделаем 2 поля, если в первом значится «yes» показываем второе, если «no» — срываем.
Field::make( 'select', 'crb_show_socials', 'Show Socials' ) ->add_options( array( 'yes' => 'Yes', 'no' => 'No', ) ), Field::make( 'text', 'crb_facebook', 'Facebook URL' ) ->set_conditional_logic( array( 'relation' => 'AND', // Необязательно, по умолчанию "AND" array( 'field' => 'crb_show_socials', 'value' => 'yes', // Необязательно, по умолчанию "". 'compare' => '=', // Необязательно, по умолчанию "=". Доступные операторы: =, <, >, <=, >=, IN, NOT IN ) ) ),
Поля условной логики ограничены родственными полями текущего поля.
Чтобы зависеть от родительских полей, добавьте к их именам префикс parent. Например, чтобы зависеть от поля crb_in_production, которое находится на 2 уровня выше, используйте parent.parent.crb_in_production.
Пример:
Field::make( 'checkbox', 'crb_in_production', 'In Production' ), Field::make( 'complex', 'crb_makes', 'Makes' ) ->add_fields( array( Field::make( 'complex', 'models', 'Models' ) ->add_fields( array( Field::make( 'text', 'name', 'Name' ), Field::make( 'text', 'price', 'Price' ) ->set_conditional_logic( array( array( 'field' => 'parent.parent.crb_in_production', 'value' => true, ) ) ) ) ) ) ),