Если вы занимаетесь профессиональной разработкой тем для WordPress, то наверняка сталкивались с вопросом создания страницы настроек. Начиная с версии 3.4 в WordPress появился Theme Customizer. Кодекс рекомендует разработчикам встраивать параметры настройки темы с его помощью, а не на странице параметров темы.

Позволяя пользователям изменять настройки вашей темы и просматривать введённые изменения «на лету», вы сделаете тему более простой в использовании и легкой для понимания. Ранее разработчики создавали отдельную страницу, которая была менее удобной для пользователя, так как, чтобы изменения вступили в силу, администратору требовалось обновить страницу.
к содержанию ↑

Элементы управления по умолчанию

Коротко пробежимся по основным моментам. Theme Customization API позволяет создавать элементы управления в разделе Внешний вид->Настроить в меню панели управления WordPress. Каждая тема, особенно последних лет, снабжена некоторыми настройками по умолчанию: заголовок сайта, слоган, цвет фона, меню, фоновое изображение, виджеты, а также статическая и главная страница. Нет необходимости добавлять какой-либо код для поддержки этих базовых параметров.

Однако, в Theme Customization API заложен большой потенциал, который было бы неправильно не использовать.
к содержанию ↑

Общие сведения о панелях, секциях, настройках и элементах управления

Панель — это блок из одной или более секций с элементами управления, для её создания используется метод add_panel(). Пример кода чуть ниже.

Секции представляют собой блок с группой элементов управления. При определении новых настроек и элементов они должны быть добавлены в указанную секцию. Для создания новой секции используется метод add_section().

Новая настройка создается через метод add_setting().  Обратите внимание, вы не сможете увидеть эту новую опцию, пока она не будет иметь свой собственный элемент управления

Новый элемент управления (контролл) регистрируется методом add_control()Элемент управления — это элемент HTML-формы на странице настройщика темы, например, поле для ввода текста, кнопки выбора цвета и так далее. В каждой секции можно встроить неограниченное количество элементов.

Ниже представлены скриншоты, как выглядят панель, а также стандартная секция «Свойства сайта» с базовыми настройками: название, логотип, краткое описание.

Несмотря на богатые возможности и огромный потенциал, по умолчанию WordPress предоставляет не так уж и много контроллов:

  • Текстовое поле input
  • Радиокнопки (группа переключателей)
  • Чекбоксы (флажки)
  • Загрузчик изображения
  • Кнопка выбора цвета
  • Выпадающий список

Вот собственно и все. Учитывая современные реалии, иногда их очень не хватает для более удобной группировки, или динамического управления данными. Думаю, что в будущих версиях, этот недостаток обязательно исправят. А пока этого не произошло, я хотел бы познакомить вас с небольшим фреймворком, позволяющим расширить возможности базового настройщика темы. Вы можете скачать его здесь.

Скачать Cody Framework (версия 1.1.0, размер файла 3.1 Mb)

к содержанию ↑

Cody Framework

Всего в новом фреймворке содержатся чуть более 25 новых элементов управления. Вместо того, чтобы их просто перечислить, я постараюсь привести код каждого элемента с короткими пояснениями. Подключение фреймворка очень простое. Распакуйте файлы и разместите папку cody-framework в корневой папке с вашей темой. Затем произведите подключение, разместив в самом начале файла function.php следующий код:

function cody_framework_include( $wp_customize ) {
	require_once get_template_directory() . '/cody-framework/admin.php';
}
add_action( 'customize_register', 'cody_framework_include' );

Хук customize_register создает подключение фреймворка только в момент загрузки страницы настройщика темы. Это значит, что ни в административной части, ни во фронтенде он не будет нагружать ваш сайт.

Прежде чем мы перейдем непосредственно к созданию настроек, коротко покажу, как создать новую панель и секцию. Параметры каждого элемента вы можете подробнее прочитать в кодексе.

Создаем новую панель. Обратите внимание, что если в панели нет ни одной секции, она не отобразится.

/**
 * New theme options panel
 */
$wp_customize->add_panel( 'cody_framework',    // id панели
	array(
		'title'        => __( 'Pro options theme', 'mytheme' ),
		'description'  => __( 'This is panel description', 'mytheme' ),
		'priority'     => 10,          // приоритет, который влияет на расположение панели
	)
);

Создадим новую секцию в панели.

$wp_customize->add_section(
	'decoration',       // id секции
	array(
		'title'       => __( 'Decoration', 'mytheme' ),
		'description' => __( 'This is description', 'mytheme' ),
		'priority'    => 10,
		'panel'       => 'cody_framework'  // id родительской панели
        )
);

Всё. Теперь можно создавать новые настройки.
к содержанию ↑

#1 Простое текстовое поле input

/**
 * Text slider
 */
$wp_customize->add_setting( 'slider_text' , array(
	'default'         => 'Слайдер',
	'transport'       => 'postMessage'
));
$wp_customize->add_control(
	new CF_Input_Text_Control(
		$wp_customize, 'slider_text', array(
			'label'       => __( 'Slider text', 'serious' ),
			'description' => __( 'You can specify vertical text for a block. Leave the field blank if you want to hide it', 'serious' ),
			'section'     => 'home_page',
			'type'	      => 'text',
			'relation'    => 'children'
		)
	)
);

#2 Простое текстовое поле textarea

$wp_customize->add_setting( 'textarea' );
$wp_customize->add_control (
	new CF_Textarea_Control (
		$wp_customize,
		'textarea',
		array(
			'label'       => __( 'Label', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'textareas',
			'type'        => 'textarea',
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#3 Текстовый редактор

Представляет собой стандартный текстовый редактор WordPress. Параметры:

  • params — массив аргументов параметра $settings у функции wp_editor()
  • relation — задает отношение к элементу Switcher (возможные значения: children или пусто)
$wp_customize->add_setting( 'text' ); // lowercase letters only
$wp_customize->add_control(
	new CF_WPEditor_Control(
		$wp_customize, 'text',
		array(
			'label'       => __( 'Textarea', 'mytheme' ),
			'description' => __( 'This is section description', 'mytheme' ),
			'section'     => 'home_page',
			'type'        => 'wp_editor',
			'params'      => array(
				'textarea_rows'    => 15,
				'media_buttons'    => true,
				'drag_drop_upload' => false,
				'teeny'            => true,
				'quicktags'        => false,
			),
			'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#4 Динамические текстовые поля input

$wp_customize->add_setting( 'multi_field', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Multi_Input_Control(
	$wp_customize, 'multi_field', array(
			'label'       => __( 'Multiple inputs', 'mytheme' ),
			'description' => __( 'Add more and more and more...', 'mytheme' ),
			'settings'    => 'multi_field',
			'section'     => 'inputs',
			//'relation'  => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

Элемент управления создает динамически изменяемую группу текстовых полей, как показано на картинке ниже.


к содержанию ↑

#5 Простые радиокнопки

$wp_customize->add_setting( 'simple', array(
	'default'     => '2',
));
$wp_customize->add_control(
	new CF_Radio_Simple_Control(
		$wp_customize, 'simple', array(
			'label'       => __( 'Simple radio', 'mytheme' ),
			'description' => __( 'This is description. Very, very big description of control', 'mytheme' ),
			'section'     => 'radio_checkbox',
			'choices'     => array(
				'1'   => __( 'One', 'mytheme' ),
				'2'   => __( 'Two', 'mytheme' ),
				'3'   => __( 'Three', 'mytheme' ),
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#6 Текстовые радиокнопки

$wp_customize->add_setting( 'text_radio', array(
	'default'     => '2',
));
$wp_customize->add_control(
	new CF_Radio_Text_Control(
		$wp_customize, 'text_radio', array(
			'label'       => __( 'Text radio', 'mytheme' ),
			'description' => __( 'This is description. Very, very big description of control', 'mytheme' ),
			'section'     => 'radio_checkbox',
			'choices'     => array(
				'1'   => __( 'One', 'mytheme' ),
				'2'   => __( 'Two', 'mytheme' ),
				'3'   => __( 'Three', 'mytheme' ),
				'4'   => __( 'Four', 'mytheme' ),
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#7 Радиокнопки картинкой

$wp_customize->add_setting( 'image_options', array(
	'default'     => '2',
));
$wp_customize->add_control(
	new CF_Radio_Image_Control(
		$wp_customize, 'image_options', array(
			'label'       => __( 'Image radio', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'radio_checkbox',
			'choices'     => array(
				'1'   => '1col.png',
				'2'   => '2cl.png',
				'3'   => '2cr.png',
				'4'   => '3cm.png',
				'5'   => '3cr.png',
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#8 Переключатель switcher

$wp_customize->add_setting( 'switch', array(
	'default'           => false,
));
$wp_customize->add_control(
	new CF_Switch_Control(
		$wp_customize, 'switch', array(
			'label'       => __( 'Check me', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'type'        => 'checkbox',
			'settings'    => 'switch',
			'section'     => 'radio_checkbox',
			'relation'    => 'parent'    // This parameter specifies a relationship to all children controls
		)
	)
);

Обратите внимание на параметр relation. Если он установлен в значении parent, то все ближайшие последующие элементы управления с параметром children будут скрыты при условии, что чекбокс не активен.
к содержанию ↑

#9 Простой выпадающий список

Пример показывает, как вывести пользовательские предустановленные параметры в выпадающем списке.

$wp_customize->add_setting( 'share' );
$wp_customize->add_control(
	new CF_Select_Control(
		$wp_customize, 'share', array(
			'label'       => __( 'Share buttons', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'social',
			'settings'    => 'share',
			'multi'       => 1,            // This option allows to create a multiselect (1 - true, 0 - false)
			'choices'     => array(        // This option item of select
				'facebook'      => 'Facebook',
				'vk'            => 'VK',
				'instagram'     => 'Instagram',
				'google+'       => 'Google+',
				'youtube'       => 'Youtube',
				'twitter'       => 'Twitter',
				'mail.ru'       => 'Mail.ru',
				'odnoklassniki' => 'Odnoklassniki',
				'pinterest'     => 'Pinterest',
				'liveinternet'  => 'Liveinternet',
				'livejournal'   => 'Livejournal',
				'bookmark'      => 'Bookmark',
				'mail'          => 'Mail',
				'print'         => 'Print'
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#10 Выпадающий список категорий записей

$wp_customize->add_setting( 'cat' );
$wp_customize->add_control(
	new CF_Category_Dropdown_Control(
		$wp_customize, 'cat', array(
			'label'       => __( 'Category Dropdown Setting', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'  	  => 'select_fields',
			'settings'    => 'cat',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#11 Список шрифтов Google

$wp_customize->add_setting( 'google_font_setting', array(
	'default'          => '',
));
$wp_customize->add_control(
	new CF_Google_Font_Dropdown_Control(
		$wp_customize, 'google_font_setting', array(
			'label'       => __( 'Google Font Setting', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'select_fields',
			'settings'    => 'google_font_setting',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#12 Список существующих меню

$wp_customize->add_setting( 'menu_dropdown_setting', array(
	'default'          => '',
));
$wp_customize->add_control(
	new CF_Menu_Dropdown_Control(
		$wp_customize, 'menu_dropdown_setting', array(
			'label'       => __( 'Menu Dropdown Setting', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'select_fields',
			'settings'    => 'menu_dropdown_setting',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#13 Список зарегистрированных типов записей

$wp_customize->add_setting( 'posts_dropdown', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Post_Type_Control(
		$wp_customize, 'posts_dropdown', array(
			'label'    	  => __( 'Select post type', 'mytheme' ),
			'description'     => __( 'Help', 'mytheme' ),
			'settings'	  => 'posts_dropdown',
			'section'  	  => 'select_fields',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#14 Список страниц из любого типа записей

$wp_customize->add_setting( 'featpost_control', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Posts_Control(
		$wp_customize, 'featpost_control', array(
			'label'       => __( 'Select Post', 'mytheme' ),
			'description' => __( 'Help', 'mytheme' ),
			'section'     => 'select_fields',
			'settings'    => 'featpost_control',
			'post_type'   => 'page',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

Вы можете менять параметр post_type на любой: page, post, или custom_post_type.
к содержанию ↑

#15 Список тегов записей

$wp_customize->add_setting( 'tags', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Tags_Control(
		$wp_customize, 'tags', array(
			'label'    		=> __( 'A custom tags', 'mytheme' ),
			'description' 	        => __( 'Description', 'mytheme' ),
			'settings'		=> 'tags',
			'section'  		=> 'select_fields',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#16 Список пользователей

$wp_customize->add_setting( 'users', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Users_Control(
		$wp_customize, 'users', array(
			'label'    		=> __( 'Users', 'mytheme' ),
			'description' 	        => __( 'Description', 'mytheme' ),
			'settings'		=> 'users',
			'section'  		=> 'select_fields',
			//'multi'       => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#17 Список таксономий

$wp_customize->add_setting( 'taxonomy', array(
	'default'        => '',
) );
$wp_customize->add_control(
	new CF_Taxonomy_Control(
		$wp_customize, 'taxonomy', array(
			'label'         => __( 'Taxonomy Dropdown Setting', 'mytheme' ),
			'description' 	=> __( 'Description', 'mytheme' ),
			'settings'      => 'taxonomy',
			'tax'           => 'product_cat',
			'section'       => 'select_fields',
			'multi'         => 1,              // This option allows to create a multiselect (1 - true, 0 - false)
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

Вы можете изменять параметр tax на любой из существующих. Например, значение product_cat выведет все категории товаров Woocommerce.
к содержанию ↑

#18 Выбор цвета с прозрачностью

$wp_customize->add_setting( 'alpha_color_setting', array(
		'default'    => 'rgba(209,0,55,0.7)',
		'type'       => 'theme_mod',
		'capability' => 'edit_theme_options',
		'transport'  => 'postMessage'
	)
);
$wp_customize->add_control(
	new CF_Color_Control(
		$wp_customize, 'alpha_color_setting', array(
			'label'        => __( 'My color', 'mytheme' ),
			'description'  => __( 'Description hey', 'mytheme' ),
			'section'      => 'colors_fields',
			'settings'     => 'alpha_color_setting',
			'show_opacity' => true, // Optional.
			'palette'      => array(
				'rgb(150, 50, 220)',
				'rgba(50,50,50,0.8)',
				'rgba( 255, 255, 255, 0.2 )',
				'#00CC99' // Mix of color types = no problem
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#19 Выбор цветовой схемы (палитры)

Позволяет создавать группы цветовых схем заранее предустановленных разработчиком темы. Цветовые схемы записываются в виде многомерного массива в параметр choices:

'choices'     => array(
	'1'   => array(
		'0'   => __( 'Big', 'mytheme' ),
		'1'   => '#f1f1f1',
		'2'   => '#f1cc00',
		'3'   => '#f1bf43',
	),
	'2'   => array(
		'0'   => __( 'Small', 'mytheme' ),
		'1'   => '#ffcc00',
		'2'   => '#bbaa23',
		'3'   => '#543211',
	),
	'3'   => array(
		'0'   => __( 'Large', 'mytheme' ),
		'1'   => '#123232',
		'2'   => '#232321',
		'3'   => '#456321',
	),
),

Пример настройки в кастомизере:

Цветовые схемы в настройщике
Цветовые схемы в настройщике
$wp_customize->add_setting( 'schemess', array(
	'default'     => '2',
));
$wp_customize->add_control(
	new CF_Color_Scheme_Control(
		$wp_customize, 'schemess', array(
			'label'       => __( 'Color scheme', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'colors_fields',
			'choices'     => array(
				'1'   => array(
					'0'   => __( 'Big', 'mytheme' ),
					'1'   => '#f1f1f1',
					'2'   => '#f1cc00',
					'3'   => '#f1bf43',
				),
				'2'   => array(
					'0'   => __( 'Small', 'mytheme' ),
					'1'   => '#ffcc00',
					'2'   => '#bbaa23',
					'3'   => '#543211',
				),
				'3'   => array(
					'0'   => __( 'Large', 'mytheme' ),
					'1'   => '#123232',
					'2'   => '#232321',
					'3'   => '#456321',
				),
			),
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#20 Выбор даты

$wp_customize->add_setting('data'); // lowercase letters only
$wp_customize->add_control(
	new CF_Date_Picker_Control(
		$wp_customize, 'data', array(
			'label'       => __( 'Select date', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'non_value',
			'type'        => 'date_picker',
			//'relation'  => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#21 Простая разделительная полоса

$wp_customize->add_setting( 'separator' );
$wp_customize->add_control(
	new CF_Separator_Control(
		$wp_customize, 'separator', array(
			'settings'	=> 'separator',
			'section'  	=> 'non_value',
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#22 Уведомление

$wp_customize->add_setting('custom_info', array(
	'default'           => '',
 
));
$wp_customize->add_control(
	new CF_Notice_Control(
		$wp_customize, 'custom_info', array(
			'label'       => __( 'A custom notice', 'mytheme' ),
			'description' => __( 'There are times that you just need to say something.', 'mytheme'),
			'settings'    => 'custom_info',
			'section'     => 'non_value',
			//'relation'  => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#23 Range slider

Одиночный ползунок для выбора числа в заданном диапазоне. Параметры контрола:

  • min — максимальное число диапазона
  • max — минимальное число диапазона
  • step — шаг изменения числа при движении ползунка
  • unit — не выполняет какую-либо практическую задачу, а лишь является пояснением для пользователя, выводится в элементе настройщика темы
$wp_customize->add_setting( 'slider' , array(
	'default'     => 0,
));
$wp_customize->add_control(
	new CF_Range_Slider_Control(
		$wp_customize, 'slider', array(
			'label'       => __( 'Range slider', 'mytheme' ),
			'description' => __( 'Help', 'mytheme' ),
			'min'         => 0,
			'max'         => 1240,
			'step'        => 10,
			'unit'        => 'px',
			'section'     => 'non_value',
			//'relation'  => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

к содержанию ↑

#24 Слайдер

Еще один динамический элемент управления. Его основная задача — создание сгруппированных данных с динамическим управлением. Каждая группа разделена логически. Параметры контрола:

  • img — динамическая загрузка изображения
  • link — простое поле input для вставки абсолютных ссылок (в принципе, можно использовать для хранения и других данных)
  • title — простое поле input для вставки заголовка
  • desc — textarea для вставки произвольного текста
  • check — чекбокс
  • relation — параметр для создания зависимости от Switcher

Контрол позволяет создавать, например, слайдеры с неограниченным количеством элементов. В этом его основная цель. Впрочем, можно использовать и для других задач.

$wp_customize->add_setting( 'services', array(
	'default'           => '',
));
$wp_customize->add_control(
	new CF_Slider_Control(
		$wp_customize, 'services', array(
			'label'       => __( 'Services box', 'mytheme' ),
			'description' => __( 'Use images with transparent backgrounds with a width and height of 600*350 pixels', 'mytheme' ),
			'settings'    => 'services',
			'section'     => 'home_page',
			'img'         => true,
			'link'        => true,
			'title'       => true,
			'desc'        => true,
			'check'       => false,
			'relation'    => 'children'
		)
	)
);

к содержанию ↑

#25 Выбор множественных изображений

$wp_customize->add_setting( 'gallery', array(
	'default'     => '',
));
$wp_customize->add_control(
	new CF_MultiImages_Control(
		$wp_customize, 'gallery', array(
			'label'       => __( 'Gallery', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'custom',
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#26 Выбор пиктограмм fontawesome

$wp_customize->add_setting( 'icons', array(
	'default'     => '',
));
$wp_customize->add_control(
	new CF_Icons_Control(
		$wp_customize, 'icons', array(
			'label'       => __( 'Icons', 'mytheme' ),
			'description' => __( 'This is description', 'mytheme' ),
			'section'     => 'custom',
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

#27 Режим работы

Позволяет удобно формировать данные, например, о времени работы компании в течение недели. Элемент управления доступен начиная с версии 1.1.

/**
 * Work schedule
 */
$wp_customize->add_setting( 'work_schedule' , array(
	'default'         => '',
	'transport'       => 'postMessage'
));
$wp_customize->add_control(
	new CF_Work_Schedule_Control(
		$wp_customize, 'work_schedule', array(
			'label'       => __( 'Work schedule', 'mytheme' ),
			'description' => __( 'Displays work schedule of company', 'mytheme' ),
			'section'     => 'contact',
			'type'	      => 'text',
			//'relation'    => 'children'    // This parameter specifies a relationship to CF_Switch_Control
		)
	)
);

Обратите внимание на новые параметры в некоторых элементах управления:

  • relation — задает отношение к элементу управления «Переключатель switcher». Может принимать либо parent, либо children. По умолчанию «пусто». Если параметр relation у переключателя в значении parent, то все последующие элементы со значением children будут скрыты, пока переключатель не станет в активном режиме.
  • multi — задает порядок выбора элементов в выпадающих списках. Может принимать значение true или false (по умолчанию). Если true, то пользователь может выбирать несколько значений.

Добавить комментарий