options = apply_filters( 'adela_customize_options', $options ); do_action( 'adela_customize_options_config', $this->options ); if( ! empty( $this->options ) ) { add_action( 'customize_register', array( $this, 'customize_register' ) ); } } public static function instance( $options = array() ){ if ( is_null( self::$instance ) ) { self::$instance = new self( $options ); } return self::$instance; } public function customize_register( $wp_customize ){ $panel_priority = 1; foreach ( $this->options as $value ) { $this->priority = $panel_priority; if( isset( $value['sections'] ) ) { $wp_customize->add_panel( $value['name'], array( 'title' => $value['title'], 'priority' => ( isset( $value['priority'] ) ) ? $value['priority'] : $panel_priority, 'description' => ( isset( $value['description'] ) ) ? $value['description'] : '', )); $this->add_section( $wp_customize, $value, $value['name'] ); } else { $this->add_section( $wp_customize, $value ); } $panel_priority++; } } public function add_section( $wp_customize, $value, $panel = false ) { $section_priority = ( $panel ) ? 1 : $this->priority; $sections = ( $panel ) ? $value['sections'] : array( 'sections' => $value ); foreach ( $sections as $section ) { // add_section $wp_customize->add_section( $section['name'], array( 'title' => $section['title'], 'priority' => ( isset( $section['priority'] ) ) ? $section['priority'] : $section_priority, 'description' => ( isset( $section['description'] ) ) ? $section['description'] : '', 'panel' => ( $panel ) ? $panel : '', ) ); $setting_priority = 1; foreach ( $section['settings'] as $setting ) { $setting_name = ADELA_CUSTOMIZER_PREFIX . '[' . $setting['name'] .']'; // add_setting $wp_customize->add_setting( $setting_name, wp_parse_args( $setting, array( 'type' => 'option', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'adela_sanitize_customizer_data', ) ) ); // add_control $control_args = wp_parse_args( $setting['control'], array( 'unique' => ADELA_CUSTOMIZER_PREFIX, 'section' => $section['name'], 'settings' => $setting_name, 'priority' => $setting_priority, )); if( $control_args['type'] == 'custom_field' ) { $call_class = 'WP_Customize_'. $control_args['options']['type'] .'_Control'; $custom_type = $control_args['options']['type']; if( !class_exists( $call_class ) ){ $class_file = get_template_directory() . "/framework/customizer/fields/{$custom_type}/{$custom_type}.php"; if( file_exists( $class_file ) ){ require_once $class_file; } } $wp_customize->add_control( new $call_class( $wp_customize, $setting['name'], $control_args ) ); } else { $wp_controls = array( 'color', 'upload', 'image', 'media' ); $call_class = 'WP_Customize_'. ucfirst( $control_args['type'] ) .'_Control'; if( in_array( $control_args['type'], $wp_controls ) && class_exists( $call_class ) ) { $wp_customize->add_control( new $call_class( $wp_customize, $setting['name'], $control_args ) ); } else { $wp_customize->add_control( $setting['name'], $control_args ); } } $setting_priority++; } $section_priority++; } } } }