+ /* Panel, Section, and Control Types */
+ $this->register_panel_type( 'WP_Customize_Panel' );
+ $this->register_section_type( 'WP_Customize_Section' );
+ $this->register_section_type( 'WP_Customize_Sidebar_Section' );
+ $this->register_control_type( 'WP_Customize_Color_Control' );
+ $this->register_control_type( 'WP_Customize_Media_Control' );
+ $this->register_control_type( 'WP_Customize_Upload_Control' );
+ $this->register_control_type( 'WP_Customize_Image_Control' );
+ $this->register_control_type( 'WP_Customize_Background_Image_Control' );
+ $this->register_control_type( 'WP_Customize_Cropped_Image_Control' );
+ $this->register_control_type( 'WP_Customize_Site_Icon_Control' );
+ $this->register_control_type( 'WP_Customize_Theme_Control' );
+
+ /* Themes */
+
+ $this->add_section( new WP_Customize_Themes_Section( $this, 'themes', array(
+ 'title' => $this->theme()->display( 'Name' ),
+ 'capability' => 'switch_themes',
+ 'priority' => 0,
+ ) ) );
+
+ // Themes Setting (unused - the theme is considerably more fundamental to the Customizer experience).
+ $this->add_setting( new WP_Customize_Filter_Setting( $this, 'active_theme', array(
+ 'capability' => 'switch_themes',
+ ) ) );
+
+ require_once( ABSPATH . 'wp-admin/includes/theme.php' );
+
+ // Theme Controls.
+
+ // Add a control for the active/original theme.
+ if ( ! $this->is_theme_active() ) {
+ $themes = wp_prepare_themes_for_js( array( wp_get_theme( $this->original_stylesheet ) ) );
+ $active_theme = current( $themes );
+ $active_theme['isActiveTheme'] = true;
+ $this->add_control( new WP_Customize_Theme_Control( $this, $active_theme['id'], array(
+ 'theme' => $active_theme,
+ 'section' => 'themes',
+ 'settings' => 'active_theme',
+ ) ) );
+ }
+
+ $themes = wp_prepare_themes_for_js();
+ foreach ( $themes as $theme ) {
+ if ( $theme['active'] || $theme['id'] === $this->original_stylesheet ) {
+ continue;
+ }
+
+ $theme_id = 'theme_' . $theme['id'];
+ $theme['isActiveTheme'] = false;
+ $this->add_control( new WP_Customize_Theme_Control( $this, $theme_id, array(
+ 'theme' => $theme,
+ 'section' => 'themes',
+ 'settings' => 'active_theme',
+ ) ) );
+ }
+
+ /* Site Identity */