get_options(); // Bail early if we don't have any options. if (empty($options)) { return; } // Add the sections if (isset($options['sections'])) { customizer_library_add_sections($options['sections'], $wp_customize); } // Add the sections if (isset($options['panels'])) { customizer_library_add_panels($options['panels'], $wp_customize); } // Sets the priority for each control added $loop = 0; // Loops through each of the options foreach ($options as $option) { // Set blank description if one isn't set if (!isset($option['description'])) { $option['description'] = ''; } if (isset($option['type'])) { $loop++; // Apply a default sanitization if one isn't set if (!isset($option['sanitize_callback'])) { $option['sanitize_callback'] = customizer_library_get_sanitization($option['type']); } // Set blank active_callback if one isn't set if (!isset($option['active_callback'])) { $option['active_callback'] = ''; } // Set default mime_type to image. if (!isset($option['mime_type'])) { $option['mime_type'] = 'image'; } // Set default flex_width to true. if (!isset($option['flex_width'])) { $option['flex_width'] = true; } // Set default flex_height to true. if (!isset($option['flex_height'])) { $option['flex_height'] = true; } // Set blank width if one isn't set if (!isset($option['width'])) { $option['width'] = ''; } // Set blank height if one isn't set if (!isset($option['height'])) { $option['height'] = ''; } // Add the setting customizer_library_add_setting($option, $wp_customize); // Priority for control if (!isset($option['priority'])) { $option['priority'] = $loop; } // Adds control based on control type switch ($option['type']) { case 'text': case 'url': case 'select': case 'radio': case 'checkbox': case 'range': case 'dropdown-pages': $wp_customize->add_control( $option['id'], $option ); break; case 'color': $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, $option['id'], $option ) ); break; case 'media': $wp_customize->add_control( new WP_Customize_Media_Control( $wp_customize, $option['id'], array( 'label' => $option['label'], 'section' => $option['section'], 'sanitize_callback' => $option['sanitize_callback'], 'priority' => $option['priority'], 'active_callback' => $option['active_callback'], 'description' => $option['description'], 'mime_type' => $option['mime_type'] ) ) ); break; case 'crop': $wp_customize->add_control( new WP_Customize_Cropped_Image_Control( $wp_customize, $option['id'], array( 'label' => $option['label'], 'section' => $option['section'], 'sanitize_callback' => $option['sanitize_callback'], 'priority' => $option['priority'], 'active_callback' => $option['active_callback'], 'description' => $option['description'], 'flex_width' => $option['flex_width'], 'flex_height' => $option['flex_height'], 'width' => $option['width'], 'height' => $option['height'], ) ) ); break; case 'textarea': // Custom control required before WordPress 4.0 if (version_compare($GLOBALS['wp_version'], '3.9.2', '<=')) : $wp_customize->add_control( new Customizer_Library_Textarea( $wp_customize, $option['id'], $option ) ); else : $wp_customize->add_control('setting_id', array( $wp_customize->add_control( $option['id'], $option ) )); endif; break; case 'date': $wp_customize->add_control( new Customizer_Library_Date( $wp_customize, $option['id'], $option ) ); break; case 'editor': $wp_customize->add_control( new Customizer_Library_Editor( $wp_customize, $option['id'], $option ) ); break; case 'radio-buttonset': $wp_customize->add_control( new Customizer_Library_Buttonset( $wp_customize, $option['id'], $option ) ); break; case 'select2': $wp_customize->add_control( new Customizer_Library_Select( $wp_customize, $option['id'], $option ) ); break; case 'select2-multiple': $wp_customize->add_control( new Customizer_Library_Select_Multiple( $wp_customize, $option['id'], $option ) ); break; case 'switch': $wp_customize->add_control( new Customizer_Library_Switch( $wp_customize, $option['id'], $option ) ); break; case 'number': $wp_customize->add_control( new Customizer_Library_Number( $wp_customize, $option['id'], $option ) ); break; case 'group-title': $wp_customize->add_control( new Customizer_Library_Group_Title( $wp_customize, $option['id'], $option ) ); break; } } } } } endif; add_action('customize_register', 'customizer_library_register', 100); /** * Add the customizer sections * * @since 1.2.0. * * @param array $option * * @return void */ function customizer_library_add_sections($sections, $wp_customize) { foreach ($sections as $section) { if (!isset($section['description'])) { $section['description'] = FALSE; } $wp_customize->add_section($section['id'], $section); } } /** * Add the customizer panels * * @since 1.2.0. * * @param array $option * * @return void */ function customizer_library_add_panels($panels, $wp_customize) { foreach ($panels as $panel) { if (!isset($panel['description'])) { $panel['description'] = FALSE; } $wp_customize->add_panel($panel['id'], $panel); } } /** * Add the setting and proper sanitization * * @since 1.2.0. * * @param array $option * * @return void */ function customizer_library_add_setting($option, $wp_customize) { $settings_default = array( 'default' => NULL, 'option_type' => 'theme_mod', 'capability' => 'edit_theme_options', 'theme_supports' => NULL, 'transport' => NULL, 'sanitize_callback' => 'wp_kses_post', 'sanitize_js_callback' => NULL ); // Settings defaults $settings = array_merge($settings_default, $option); // Arguments for $wp_customize->add_setting $wp_customize->add_setting($option['id'], array( 'default' => $settings['default'], 'type' => $settings['option_type'], 'capability' => $settings['capability'], 'theme_supports' => $settings['theme_supports'], 'transport' => $settings['transport'], 'sanitize_callback' => $settings['sanitize_callback'], 'sanitize_js_callback' => $settings['sanitize_js_callback'] ) ); } /** * Get default sanitization function for option type * * @since 1.2.0. * * @param array $option * * @return void */ function customizer_library_get_sanitization($type) { if ('select' == $type || 'select2' == $type || 'select2-multiple' == $type || 'radio' == $type || 'radio-buttonset' == $type) { return 'customizer_library_sanitize_choices'; } if ('checkbox' == $type || 'switch' == $type) { return 'customizer_library_sanitize_checkbox'; } if ('color' == $type) { return 'sanitize_hex_color'; } if ('text' == $type || 'textarea' == $type || 'editor' == $type || 'date' == $type) { return 'customizer_library_sanitize_text'; } if ('url' == $type) { return 'esc_url'; } if ('range' == $type) { return 'customizer_library_sanitize_range'; } if ('dropdown-pages' == $type || 'number' == $type || 'media' == $type || 'crop' == $type) { return 'absint'; } // If a custom option is being used, return false return FALSE; }