$args ) { $weights_arg = array(); if ( is_array( $args ) && isset( $args['weights'] ) && is_array( $args['weights'] ) ) { $weights_arg = $args['weights']; } $font_slug = ( is_array( $args ) && isset( $args['fallback'] ) && ! empty( $args['fallback'] ) ? '"' . $font_name . '", ' . $args['fallback'] : $font_name ); $custom_fonts[ $font_slug ] = array( 'v' => $weights_arg, ); } return $custom_fonts; }, 10 ); } } /** * Reset font folder * * @access public * @return void */ public function ajax_delete_fonts_folder() { // Check request. if ( ! check_ajax_referer( 'kadence-local-fonts-flush', 'nonce', false ) ) { wp_send_json_error( 'invalid_nonce' ); } if ( ! current_user_can( 'edit_theme_options' ) ) { wp_send_json_error( 'invalid_permissions' ); } if ( class_exists( '\Kadence\WebFont_Loader' ) ) { $font_loader = new \Kadence\WebFont_Loader( '' ); $removed = $font_loader->delete_fonts_folder(); if ( ! $removed ) { wp_send_json_error( 'failed_to_flush' ); } wp_send_json_success(); } wp_send_json_error( 'no_font_loader' ); } /** * Add Woocommerce Cart option to header. */ public function add_woocommerce_choices() { if ( class_exists( 'woocommerce' ) ) { $options = self::$choices['header_desktop_items']; $options['cart'] = array( 'name' => esc_html__( 'Cart', 'kadence' ), 'section' => 'kadence_customizer_cart', ); self::$choices['header_desktop_items'] = $options; // Mobile Cart. $options = self::$choices['header_mobile_items']; $options['mobile-cart'] = array( 'name' => esc_html__( 'Cart', 'kadence' ), 'section' => 'kadence_customizer_mobile_cart', ); self::$choices['header_mobile_items'] = $options; } } /** * Filter footer widget areas. * * @param array $section_args the widget sections args. * @param string $section_id the widget sections id. * @param string $sidebar_id the widget area id. */ public function customizer_custom_widget_areas( $section_args, $section_id, $sidebar_id ) { if ( 'footer1' === $sidebar_id || 'footer2' === $sidebar_id || 'footer3' === $sidebar_id || 'footer4' === $sidebar_id || 'footer5' === $sidebar_id || 'footer6' === $sidebar_id ) { $section_args['panel'] = 'kadence_customizer_footer'; } return $section_args; } /** * Add settings * * @access public * @param object $wp_customize the customizer object. * @return void */ public function create_settings_array( $wp_customize ) { // Load Sanitize Class. require_once get_template_directory() . '/inc/customizer/class-customizer-sanitize.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound // Load Settings files. foreach ( self::$settings_sections as $key ) { require_once get_template_directory() . '/inc/customizer/options/' . $key . '-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } if ( class_exists( 'woocommerce' ) ) { require_once get_template_directory() . '/inc/customizer/options/header-cart-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/header-mobile-cart-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/product-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/product-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/my-account-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/woo-store-notice-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } if ( class_exists( 'SFWD_LMS' ) ) { require_once get_template_directory() . '/inc/customizer/options/learndash-course-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/learndash-groups-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/learndash-essays-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/learndash-course-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound if ( class_exists( 'LearnDash_Settings_Section' ) ) { $in_focus_mode = \LearnDash_Settings_Section::get_section_setting( 'LearnDash_Settings_Theme_LD30', 'focus_mode_enabled' ); if ( ! $in_focus_mode ) { require_once get_template_directory() . '/inc/customizer/options/learndash-lesson-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/learndash-topic-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/learndash-quiz-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } } if ( defined( 'LEARNDASH_COURSE_GRID_VERSION' ) && version_compare( LEARNDASH_COURSE_GRID_VERSION, '2.0.0', '<' ) ) { require_once get_template_directory() . '/inc/customizer/options/learndash-grid-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } } if ( class_exists( 'LifterLMS' ) ) { require_once get_template_directory() . '/inc/customizer/options/lifter-course-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-course-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-lesson-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-quiz-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-member-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-member-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/lifter-dashboard-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } if ( class_exists( 'TUTOR\Tutor' ) ) { require_once get_template_directory() . '/inc/customizer/options/tutor-course-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/tutor-course-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } if ( class_exists( 'BBPress' ) ) { require_once get_template_directory() . '/inc/customizer/options/forum-archive-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/forum-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once get_template_directory() . '/inc/customizer/options/topic-layout-options.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } if ( defined( 'TRIBE_EVENTS_FILE' ) ) { require_once get_template_directory() . '/inc/customizer/options/tec-event-layout-options.php'; // phpcs:ignore WPThemeReview. require_once get_template_directory() . '/inc/customizer/options/tec-event-archive-layout-options.php'; // phpcs:ignore WPThemeReview. } } /** * Overide default settings * * @access public * @param object $wp_customize the customizer object. * @return void */ public function override_defaults( $wp_customize ) { /** * Override Settings */ $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; /** * Move Site Identity */ $wp_customize->get_control( 'site_icon' )->section = 'kadence_customizer_site_identity'; /** * Override Controls Priority */ $wp_customize->get_control( 'custom_logo' )->priority = 4; $wp_customize->get_control( 'blogname' )->priority = 7; $wp_customize->get_control( 'blogdescription' )->priority = 10; /** * Override Post Message */ $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; if ( isset( $wp_customize->selective_refresh ) ) { $wp_customize->selective_refresh->add_partial( 'blogname', array( 'selector' => '.site-title', 'render_callback' => function() { bloginfo( 'name' ); }, ) ); $wp_customize->selective_refresh->add_partial( 'blogdescription', array( 'selector' => '.site-description', 'render_callback' => function() { bloginfo( 'description' ); }, ) ); $wp_customize->selective_refresh->add_partial( 'custom_logo', array( 'selector' => '.site-branding', 'container_inclusive' => true, 'render_callback' => 'Kadence\site_branding', ) ); } if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', 'custom_logo' ) ) ) { $wp_customize->remove_control( 'custom_logo' ); $id = $opt_name_key . '[custom_logo]'; $wp_customize->add_setting( $id, array( 'type' => 'option', 'transport' => 'postMessage', 'capability' => self::get_capability(), 'default' => isset( $setting['default'] ) && $control_class !== 'Kadence_Control_Background' ? $setting['default'] : '', 'sanitize_callback' => array( 'Kadence\Customizer_Sanitize', 'kadence_sanitize_option' ), ) ); $control_config = array( 'settings' => $id, 'section' => 'title_tagline', 'capability' => self::get_capability(), 'priority' => 4, 'label' => esc_html__( 'Logo', 'kadence' ), 'mime_type' => 'image', 'active_callback' => '__return_true', ); $wp_customize->add_control( new \WP_Customize_Media_Control( $wp_customize, $id, $control_config ) ); $wp_customize->selective_refresh->add_partial( $id, array( 'selector' => '.site-branding', 'container_inclusive' => true, 'render_callback' => 'Kadence\site_branding', ) ); $general_tab = array( array( 'setting' => '__current_tab', 'value' => 'general', ), ); self::$contexts[$id] = $general_tab; } /** * Add Tab Conditionals */ $general_tab = array( array( 'setting' => '__current_tab', 'value' => 'general', ), ); self::$contexts['custom_logo'] = $general_tab; self::$contexts['blogname'] = $general_tab; self::$contexts['blogdescription'] = $general_tab; $palette_live = array( array( 'type' => 'palette', 'selector' => ':root', 'property' => 'global-palette', 'pattern' => '$', 'key' => 'palette', ), ); self::$live_control['kadence_global_palette'] = $palette_live; } /** * Add Controls * * @access public * @param object $wp_customize the customizer object. * @return void */ public function register_controls( $wp_customize ) { $path = get_template_directory() . '/inc/customizer/custom-controls/'; $react_path = get_template_directory() . '/inc/customizer/react/'; // Register the custom control type. require_once $path . 'class-kadence-control-blank.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-color.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-range.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-switch.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-radio-icon.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-multi-radio-icon.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-builder.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-available.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-color-palette.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-background.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-border.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-borders.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-typography.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-title.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-focus-button.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-color-link.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-text.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-textarea.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-measure.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-editor.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-sorter.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-social.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-contact.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-check-icon.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-select.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-row.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-tab.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound require_once $react_path . 'class-kadence-control-shadow.php'; // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound } /** * Adds Settings to settings array. * * @param array $new_settings an array of settings. */ public static function add_settings( $new_settings ) { self::$settings = array_merge( $new_settings, self::$settings ); } /** * Get header customizer panels * * @access public * @return array */ public static function get_panels() { // Define panels. if ( is_null( self::$panels ) ) { $panels = array( 'design' => array( 'title' => __( 'Colors & Fonts', 'kadence' ), 'priority' => 18, ), 'header' => array( 'title' => __( 'Header', 'kadence' ), 'priority' => 20, ), 'footer' => array( 'title' => __( 'Footer', 'kadence' ), 'priority' => 22, ), 'general' => array( 'title' => __( 'General', 'kadence' ), 'priority' => 23, ), 'all_posts' => array( 'title' => __( 'Posts/Pages Layout', 'kadence' ), 'priority' => 24, ), ); if ( class_exists( 'SFWD_LMS' ) ) { $extra_learn['learndash'] = array( 'title' => __( 'LearnDash', 'kadence' ), 'priority' => 25, ); $panels = array_merge( $panels, $extra_learn ); } if ( class_exists( 'LifterLMS' ) ) { $extra_lifter['lifterlms'] = array( 'title' => __( 'LifterLMS', 'kadence' ), 'priority' => 25, ); $panels = array_merge( $panels, $extra_lifter ); } if ( class_exists( 'BBPress' ) ) { $extra_bbpress['bbpress'] = array( 'title' => __( 'bbPress', 'kadence' ), 'priority' => 25, ); $panels = array_merge( $panels, $extra_bbpress ); } if ( class_exists( 'TUTOR\Tutor' ) ) { $extra_tutor['tutorlms'] = array( 'title' => __( 'TutorLMS', 'kadence' ), 'priority' => 25, ); $panels = array_merge( $panels, $extra_tutor ); } self::$panels = $panels; } // Return panels. return self::$panels; } /** * Get Customizer sections * * @access public * @return array */ public static function get_sections() { // Define sections. if ( is_null( self::$sections ) ) { $sections = array( 'site_identity' => array( 'title' => __( 'Site Identity', 'kadence' ), 'priority' => 25, ), 'general_layout' => array( 'title' => __( 'Layout', 'kadence' ), 'panel' => 'general', 'priority' => 7, ), 'sidebar' => array( 'title' => __( 'Sidebar', 'kadence' ), 'panel' => 'general', 'priority' => 8, ), 'sidebar_design' => array( 'title' => __( 'Sidebar Design', 'kadence' ), 'panel' => 'general', 'priority' => 8, ), 'general_colors' => array( 'title' => __( 'Colors', 'kadence' ), 'panel' => 'design', 'priority' => 9, ), 'general_buttons' => array( 'title' => __( 'Buttons', 'kadence' ), 'panel' => 'design', 'priority' => 10, ), 'general_typography' => array( 'title' => __( 'Typography', 'kadence' ), 'panel' => 'design', 'priority' => 11, ), 'general_image' => array( 'title' => __( 'Images', 'kadence' ), 'panel' => 'general', 'priority' => 11, ), 'scroll_up' => array( 'title' => __( 'Scroll To Top', 'kadence' ), 'panel' => 'general', 'priority' => 12, ), 'scroll_up_design' => array( 'title' => __( 'Scroll To Top', 'kadence' ), 'panel' => 'general', 'priority' => 12, ), 'general_social' => array( 'title' => __( 'Social Links', 'kadence' ), 'panel' => 'general', 'priority' => 20, ), 'general_comments' => array( 'title' => __( 'Comments', 'kadence' ), 'panel' => 'general', 'priority' => 20, ), 'general_performance' => array( 'title' => __( 'Performance', 'kadence' ), 'panel' => 'general', 'priority' => 21, ), 'breadcrumbs' => array( 'title' => __( 'Breadcrumbs', 'kadence' ), 'panel' => 'general', 'priority' => 20, ), 'general_404' => array( 'title' => __( '404 Page Layout', 'kadence' ), 'panel' => 'general', 'priority' => 20, ), 'general_404_design' => array( 'title' => __( '404 Page Layout', 'kadence' ), 'panel' => 'general', 'priority' => 20, ), 'header_layout' => array( 'title' => __( 'Header Layout', 'kadence' ), 'panel' => 'header', 'priority' => 8, ), 'header_builder' => array( 'title' => __( 'Header Builder', 'kadence' ), 'panel' => 'header', 'priority' => 9, ), 'header_top' => array( 'title' => __( 'Top Row', 'kadence' ), 'panel' => 'header', 'priority' => 10, ), 'header_main' => array( 'title' => __( 'Main Row', 'kadence' ), 'panel' => 'header', 'priority' => 10, ), 'header_bottom' => array( 'title' => __( 'Bottom Row', 'kadence' ), 'panel' => 'header', 'priority' => 10, ), 'header_popup' => array( 'title' => __( 'Header Off Canvas', 'kadence' ), 'panel' => 'header', 'priority' => 10, ), 'header_popup_design' => array( 'title' => __( 'Header Off Canvas', 'kadence' ), 'panel' => 'header', 'priority' => 10, ), 'title_tagline' => array( 'title' => __( 'Site Identity', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'primary_navigation' => array( 'title' => __( 'Primary Navigation', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'secondary_navigation' => array( 'title' => __( 'Secondary Navigation', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'dropdown_navigation' => array( 'title' => __( 'Dropdown Navigation', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'dropdown_navigation_design' => array( 'title' => __( 'Dropdown Navigation', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_trigger' => array( 'title' => __( 'Mobile Trigger', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_trigger_design' => array( 'title' => __( 'Mobile Trigger', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_navigation' => array( 'title' => __( 'Mobile Navigation', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_button' => array( 'title' => __( 'Header Mobile Button', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_button_design' => array( 'title' => __( 'Header Mobile Button', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_html' => array( 'title' => __( 'Header Mobile HTML', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_html' => array( 'title' => __( 'HTML Editor', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_html_design' => array( 'title' => __( 'HTML Editor', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'cart' => array( 'title' => __( 'Header Cart', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'cart_design' => array( 'title' => __( 'Header Cart Design', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_cart' => array( 'title' => __( 'Mobile Header Cart', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_cart_design' => array( 'title' => __( 'Mobile Header Cart', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_button' => array( 'title' => __( 'Header Button', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_button_design' => array( 'title' => __( 'Header Button', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_social' => array( 'title' => __( 'Header Social', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_social_design' => array( 'title' => __( 'Header Social', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_social' => array( 'title' => __( 'Header Social', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'mobile_social_design' => array( 'title' => __( 'Header Social', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_search' => array( 'title' => __( 'Header Search', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'transparent_header' => array( 'title' => __( 'Transparent Header', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'transparent_header_design' => array( 'title' => __( 'Transparent Header', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_sticky' => array( 'title' => __( 'Sticky Header', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'header_sticky_design' => array( 'title' => __( 'Sticky Header', 'kadence' ), 'panel' => 'header', 'priority' => 20, ), 'footer_layout' => array( 'title' => __( 'Footer Layout', 'kadence' ), 'panel' => 'footer', 'priority' => 8, ), 'footer_builder' => array( 'title' => __( 'Footer Builder', 'kadence' ), 'panel' => 'footer', 'priority' => 9, ), 'footer_top' => array( 'title' => __( 'Footer Top', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_top_design' => array( 'title' => __( 'Footer Top', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_middle' => array( 'title' => __( 'Footer Middle', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_middle_design' => array( 'title' => __( 'Footer Middle', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_bottom' => array( 'title' => __( 'Footer Bottom', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_bottom_design' => array( 'title' => __( 'Footer Bottom', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_html' => array( 'title' => __( 'Footer Copyright HTML', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_social' => array( 'title' => __( 'Footer Social', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_social_design' => array( 'title' => __( 'Footer Social', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'footer_navigation' => array( 'title' => __( 'Footer Navigation', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ), 'page_layout' => array( 'title' => __( 'Page Layout', 'kadence' ), 'panel' => 'all_posts', 'priority' => 3, ), 'search' => array( 'title' => __( 'Search Results', 'kadence' ), 'priority' => 24, ), 'search_design' => array( 'title' => __( 'Search Results', 'kadence' ), 'priority' => 24, ), 'post_layout' => array( 'title' => __( 'Single Post Layout', 'kadence' ), 'panel' => 'all_posts', 'priority' => 7, ), 'post_layout_design' => array( 'title' => __( 'Single Post Layout', 'kadence' ), 'panel' => 'all_posts', 'priority' => 7, ), 'post_archive' => array( 'title' => __( 'Archive Layout', 'kadence' ), 'panel' => 'all_posts', 'priority' => 8, ), 'post_archive_design' => array( 'title' => __( 'Archive Layout', 'kadence' ), 'panel' => 'all_posts', 'priority' => 8, ), // 'custom_post' => array( // 'title' => __( 'Custom Post Types', 'kadence' ), // 'panel' => 'all_posts', // 'priority' => 24, // ), ); if ( ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.6.2', '>' ) ) || version_compare( substr( get_bloginfo( 'version' ), 0, 3 ), '5.8', '>=' ) ) { $blocks_extra['sidebar-widgets-footer1'] = array( 'title' => __( 'Widget Footer 1 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-footer2'] = array( 'title' => __( 'Widget Footer 2 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-footer3'] = array( 'title' => __( 'Widget Footer 3 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-footer4'] = array( 'title' => __( 'Widget Footer 4 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-footer5'] = array( 'title' => __( 'Widget Footer 5 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-footer6'] = array( 'title' => __( 'Widget Footer 6 Settings', 'kadence' ), 'panel' => 'footer', 'priority' => 10, ); $blocks_extra['sidebar-widgets-header1'] = array( 'title' => __( 'Widget Header Settings', 'kadence' ), 'panel' => 'header', 'priority' => 10, ); $blocks_extra['sidebar-widgets-header2'] = array( 'title' => __( 'Widget Area Settings', 'kadence' ), 'panel' => 'header', 'priority' => 10, ); $blocks_extra['sidebar-widgets-product-filter'] = array( 'title' => __( 'Catalog Off Canvas Sidebar Settings', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 18, ); $sections = array_merge( $sections, $blocks_extra ); } if ( class_exists( 'woocommerce' ) ) { $extra_woo['woocommerce_product_catalog'] = array( 'title' => __( 'Product Catalog', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 10, ); $extra_woo['woocommerce_product_catalog_design'] = array( 'title' => __( 'Product Catalog', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 10, ); $extra_woo['product_layout'] = array( 'title' => __( 'Single Product Layout', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 10, ); $extra_woo['product_layout_design'] = array( 'title' => __( 'Single Product Layout', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 10, ); $extra_woo['account_layout'] = array( 'title' => __( 'My Account Layout', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 24, ); $extra_woo['woocommerce_store_notice_design'] = array( 'title' => __( 'Store Notice', 'kadence' ), 'panel' => 'woocommerce', 'priority' => 10, ); $sections = array_merge( $sections, $extra_woo ); } if ( class_exists( 'SFWD_LMS' ) ) { $extra_learn = array(); $extra_learn['sfwd_courses_layout'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 10, ); $extra_learn['sfwd_courses_layout_design'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 10, ); $extra_learn['sfwd_courses_archive_layout'] = array( 'title' => __( 'Course Archive Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_courses_archive_layout_design'] = array( 'title' => __( 'Course Archive Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_lesson_layout'] = array( 'title' => __( 'Lesson Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_lesson_layout_design'] = array( 'title' => __( 'Lesson Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_quiz_layout'] = array( 'title' => __( 'Quiz Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_quiz_layout_design'] = array( 'title' => __( 'Quiz Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_topic_layout'] = array( 'title' => __( 'Topic Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_topic_layout_design'] = array( 'title' => __( 'Topic Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_groups_layout'] = array( 'title' => __( 'Groups Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_groups_layout_design'] = array( 'title' => __( 'Groups Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_essays_layout'] = array( 'title' => __( 'Essay Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_essays_layout_design'] = array( 'title' => __( 'Essay Layout', 'kadence' ), 'panel' => 'learndash', 'priority' => 11, ); $extra_learn['sfwd_design'] = array( 'title' => __( 'Learn Dash Design', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_grid_layout'] = array( 'title' => __( 'Course Grid Design', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $extra_learn['sfwd_grid_layout_design'] = array( 'title' => __( 'Course Grid Design', 'kadence' ), 'panel' => 'learndash', 'priority' => 12, ); $sections = array_merge( $sections, $extra_learn ); } if ( class_exists( 'BBPress' ) ) { $extra_bbpress = array(); $extra_bbpress['topic_layout'] = array( 'title' => __( 'Topic Layout', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, ); $extra_bbpress['topic_layout_design'] = array( 'title' => __( 'Topic Layout', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, 'type' => 'design-hidden', ); $extra_bbpress['forum_layout'] = array( 'title' => __( 'Forum Layout', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, ); $extra_bbpress['forum_layout_design'] = array( 'title' => __( 'Forum Layout', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, 'type' => 'design-hidden', ); $extra_bbpress['forum_archive'] = array( 'title' => __( 'Forum Archive', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, ); $extra_bbpress['forum_archive_design'] = array( 'title' => __( 'Forum Archive', 'kadence' ), 'panel' => 'bbpress', 'priority' => 10, 'type' => 'design-hidden', ); $sections = array_merge( $sections, $extra_bbpress ); } if ( class_exists( 'LifterLMS' ) ) { $extra_lifter['course_layout'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 10, ); $extra_lifter['course_layout_design'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 10, ); $extra_lifter['course_archive'] = array( 'title' => __( 'Course Archive', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 11, ); $extra_lifter['course_archive_design'] = array( 'title' => __( 'Course Archive', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 11, ); $extra_lifter['lesson_layout'] = array( 'title' => __( 'Lesson Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 12, ); $extra_lifter['lesson_layout_design'] = array( 'title' => __( 'Lesson Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 12, ); $extra_lifter['llms_quiz_layout'] = array( 'title' => __( 'Quiz Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 13, ); $extra_lifter['llms_membership_layout'] = array( 'title' => __( 'Membership Layout', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 14, ); $extra_lifter['llms_membership_archive'] = array( 'title' => __( 'Membership Archive', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 15, ); $extra_lifter['llms_membership_archive_design'] = array( 'title' => __( 'Membership Archive', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 15, ); $extra_lifter['llms_dashboard_layout'] = array( 'title' => __( 'User Dashboard', 'kadence' ), 'panel' => 'lifterlms', 'priority' => 16, ); $sections = array_merge( $sections, $extra_lifter ); } if ( class_exists( 'TUTOR\Tutor' ) ) { $extra_tutor['courses_layout'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'tutorlms', 'priority' => 10, ); $extra_tutor['courses_layout_design'] = array( 'title' => __( 'Course Layout', 'kadence' ), 'panel' => 'tutorlms', 'priority' => 10, ); $extra_tutor['courses_archive_layout'] = array( 'title' => __( 'Course Archive Layout', 'kadence' ), 'panel' => 'tutorlms', 'priority' => 11, ); $extra_tutor['courses_archive_layout_design'] = array( 'title' => __( 'Course Archive Layout', 'kadence' ), 'panel' => 'tutorlms', 'priority' => 11, ); $sections = array_merge( $sections, $extra_tutor ); } if ( defined( 'TRIBE_EVENTS_FILE' ) ) { $extra_events['tribe_events_layout'] = array( 'title' => __( 'Single Event Layout', 'kadence' ), 'panel' => 'tribe_customizer', 'priority' => 80, ); $extra_events['tribe_events_layout_design'] = array( 'title' => __( 'Single Event Layout', 'kadence' ), 'panel' => 'tribe_customizer', 'priority' => 80, ); $extra_events['tribe_events_archive'] = array( 'title' => __( 'Events Layout', 'kadence' ), 'panel' => 'tribe_customizer', 'priority' => 85, ); $sections = array_merge( $sections, $extra_events ); } $post_types = kadence()->get_post_types_objects(); $extras_post_types = array(); $add_extras = false; foreach ( $post_types as $post_type_item ) { $post_type_name = $post_type_item->name; $post_type_label = $post_type_item->label; $ignore_type = kadence()->get_post_types_to_ignore(); $panel_name = 'all_posts'; $panel_priority = 10; if ( ! in_array( $post_type_name, $ignore_type, true ) ) { if ( $post_type_name === 'ld-exam' ) { $panel_name = 'learndash'; $panel_priority = 40; } $add_extras = true; $extras_post_types[ $post_type_name . '_layout' ] = array( 'title' => $post_type_label . ' ' . __( 'Layout', 'kadence' ), 'panel' => $panel_name, 'priority' => $panel_priority, ); $extras_post_types[ $post_type_name . '_layout_design' ] = array( 'title' => $post_type_label . ' ' . __( 'Layout', 'kadence' ), 'panel' => $panel_name, 'priority' => $panel_priority, 'type' => 'design-hidden', ); if ( $post_type_name !== 'ld-exam' ) { $extras_post_types[ $post_type_name . '_archive' ] = array( 'title' => $post_type_label . ' ' . __( 'Archive', 'kadence' ), 'panel' => $panel_name, 'priority' => $panel_priority, ); $extras_post_types[ $post_type_name . '_archive_design' ] = array( 'title' => $post_type_label . ' ' . __( 'Archive', 'kadence' ), 'panel' => $panel_name, 'priority' => $panel_priority, 'type' => 'design-hidden', ); } } } if ( $add_extras ) { $extras_post_types['custom_posts_placeholder'] = array( 'title' => __( 'Custom Post Types', 'kadence' ), 'panel' => 'all_posts', 'priority' => 9, ); $final_sections = array_merge( $sections, $extras_post_types ); } else { $final_sections = $sections; } self::$sections = apply_filters( 'kadence_theme_customizer_sections', $final_sections ); } // Return sections. return self::$sections; } /** * Get Customizer Capability * * @access public * @return string */ public static function get_capability() { // Define sections. if ( is_null( self::$capability ) ) { self::$capability = apply_filters( 'kadence_theme_customizer_capability', 'manage_options' ); } // Return capability. return self::$capability; } /** * Add settings * * @access public * @param object $wp_customize the customizer object. * @return void */ public function register_settings( $wp_customize ) { // Iterate over settings. foreach ( self::$settings as $setting_key => $setting ) { if ( isset( $setting['settings'] ) && false === $setting['settings'] ) { continue; } // Define Control Class. if ( isset( $setting['control_type'] ) && ! empty( $setting['control_type'] ) ) { if ( substr( $setting['control_type'], 0, 8 ) === 'kadence_' ) { $control_class = 'Kadence_Control_' . ucfirst( str_replace( 'kadence_', '', str_replace( '_control', '', $setting['control_type'] ) ) ); } else { $control_class = 'WP_Customize_' . ucfirst( $setting['control_type'] ) . '_Control'; } } else { $control_class = 'WP_Customize_Control'; } // Define Sanitize Function. if ( isset( $setting['sanitize'] ) && ! empty( $setting['sanitize'] ) ) { if ( substr( $setting['sanitize'], 0, 8 ) === 'kadence_' ) { $sanitize_function = array( 'Kadence\Customizer_Sanitize', $setting['sanitize'] ); } else { $sanitize_function = $setting['sanitize']; } } else { $sanitize_function = array( 'Kadence\Customizer_Sanitize', 'kadence_sanitize_option' ); $sanitize_function = ''; } if ( 'option' === kadence()->get_option_type() ) { $setting_key = kadence()->get_option_name() . '[' . $setting_key . ']'; } if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', $setting_key ) ) ) { $id = $opt_name_key . '[' . $setting_key . ']'; if ( isset( $setting['settings'] ) && is_array( $setting['settings'] ) ) { foreach ( $setting['settings'] as $setting_key => $id ) { $setting_id = $opt_name_key . '[' . $id . ']'; $wp_customize->add_setting( $setting_id, array( 'type' => 'option', 'default' => kadence()->default( $id ), 'transport' => isset( $setting['transport'] ) ? $setting['transport'] : 'postMessage', 'capability' => self::get_capability(), 'sanitize_callback' => $sanitize_function, ) ); } } else { $wp_customize->add_setting( $id, array( 'type' => 'option', 'transport' => isset( $setting['transport'] ) ? $setting['transport'] : 'postMessage', 'capability' => self::get_capability(), 'default' => isset( $setting['default'] ) && $control_class !== 'Kadence_Control_Background' ? $setting['default'] : '', 'sanitize_callback' => $sanitize_function, ) ); } } else { if ( isset( $setting['settings'] ) && is_array( $setting['settings'] ) ) { foreach ( $setting['settings'] as $setting_key => $id ) { if ( 'option' === kadence()->get_option_type() ) { $id = self::get_option_name() . '[' . $id . ']'; } $wp_customize->add_setting( $id, array( 'type' => kadence()->get_option_type(), 'default' => kadence()->default( $id ), 'transport' => isset( $setting['transport'] ) ? $setting['transport'] : 'postMessage', 'capability' => self::get_capability(), 'sanitize_callback' => $sanitize_function, ) ); } } else { $wp_customize->add_setting( $setting_key, array( 'type' => kadence()->get_option_type(), 'transport' => isset( $setting['transport'] ) ? $setting['transport'] : 'postMessage', 'capability' => self::get_capability(), 'default' => isset( $setting['default'] ) && $control_class !== 'Kadence_Control_Background' ? $setting['default'] : '', 'sanitize_callback' => $sanitize_function, ) ); } } } } /** * Maybe add section * * @access public * @param object $wp_customize the object. * @param array $child the child item. * @return void */ public static function maybe_add_section( $wp_customize, $child ) { // Get sections. $sections = self::get_sections(); // Check if section is set and exists. if ( ! empty( $child['section'] ) && isset( $sections[ $child['section'] ] ) ) { // Reference current section key. $section_key = $child['section']; // Check if section was not added yet. if ( ! in_array( $section_key, self::$sections_added, true ) ) { // Reference current section. $section = $sections[ $section_key ]; // Section config. $section_config = array( 'title' => $section['title'], 'priority' => ( isset( $section['priority'] ) ? $section['priority'] : 10 ), 'type' => ( isset( $section['type'] ) ? $section['type'] : 'default' ), ); // Description. if ( ! empty( $section['description'] ) ) { $section_config['description'] = $section['description']; } // Maybe add panel. self::maybe_add_panel( $wp_customize, $section ); // Maybe add section to panel. if ( ! empty( $section['panel'] ) ) { if ( 'woocommerce' === $section['panel'] ) { $section_config['panel'] = $section['panel']; } elseif ( 'tribe_customizer' === $section['panel'] ) { $section_config['panel'] = $section['panel']; } else { $section_config['panel'] = 'kadence_customizer_' . $section['panel']; } } $section_id = 'title_tagline' === $section_key || 'static_front_page' === $section_key || 'sidebar-widgets-product-filter' === $section_key || 'sidebar-widgets-header1' === $section_key || 'sidebar-widgets-header2' === $section_key || 'sidebar-widgets-footer1' === $section_key || 'sidebar-widgets-footer2' === $section_key || 'sidebar-widgets-footer3' === $section_key || 'sidebar-widgets-footer4' === $section_key || 'sidebar-widgets-footer5' === $section_key || 'sidebar-widgets-footer6' === $section_key || 'woocommerce_product_catalog_design' === $section_key || 'woocommerce_product_catalog' === $section_key || 'woocommerce_store_notice' === $section_key || 'woocommerce_store_notice_design' === $section_key ? $section_key : 'kadence_customizer_' . $section_key; // Undo widgets if using gutenberg plugin or 5.8 beta. if ( ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.6.2', '>' ) ) || version_compare( substr( get_bloginfo( 'version' ), 0, 3 ), '5.8', '>=' ) ) { if ( 'sidebar-widgets-footer1' === $section_key || 'sidebar-widgets-footer2' === $section_key || 'sidebar-widgets-footer3' === $section_key || 'sidebar-widgets-footer4' === $section_key || 'sidebar-widgets-footer5' === $section_key || 'sidebar-widgets-footer6' === $section_key || 'sidebar-widgets-header1' === $section_key || 'sidebar-widgets-header2' === $section_key || 'sidebar-widgets-product-filter' === $section_key ) { $section_id = 'kadence_customizer_' . $section_key; } } // Register section. $wp_customize->add_section( $section_id, $section_config ); // Track which sections were added. self::$sections_added[] = $section_key; } } } /** * Maybe add panel * * @access public * @param object $wp_customize the object. * @param array $child the child item. * @return void */ public static function maybe_add_panel( $wp_customize, $child ) { // Get panels. $panels = self::get_panels(); // Check if panel is set and exists. if ( ! empty( $child['panel'] ) && isset( $panels[ $child['panel'] ] ) ) { // Reference current panel key. $panel_key = $child['panel']; // Check if panel was not added yet. if ( ! in_array( $panel_key, self::$panels_added, true ) ) { // Reference current panel. $panel = $panels[ $panel_key ]; // Panel config. $panel_config = array( 'title' => $panel['title'], 'priority' => ( isset( $panel['priority'] ) ? $panel['priority'] : 10 ), 'capability' => self::get_capability(), ); // Panel description. if ( ! empty( $panel['description'] ) ) { $panel_config['description'] = $panel['description']; } // Register panel. $wp_customize->add_panel( 'kadence_customizer_' . $panel_key, $panel_config ); // Track which panels were added. self::$panels_added[] = $panel_key; } } } /** * Add controls, sections and panels * * @access public * @param object $wp_customize the customizer object. * @return void */ public function add_controls( $wp_customize ) { // Iterate over settings. foreach ( self::$settings as $setting_key => $setting ) { // Maybe add section. self::maybe_add_section( $wp_customize, $setting ); // Maybe add panel. self::maybe_add_panel( $wp_customize, $setting ); // Maybe add context. if ( isset( $setting['context'] ) && ! empty( $setting['context'] ) ) { self::maybe_add_context( $setting_key, $setting ); } // Maybe add live changes. if ( isset( $setting['live_method'] ) && ! empty( $setting['live_method'] ) ) { if ( isset( $setting['settings'] ) && is_array( $setting['settings'] ) ) { foreach ( $setting['settings'] as $setting_item => $id ) { self::maybe_add_live( $id, $setting ); } } else { self::maybe_add_live( $setting_key, $setting ); } } // Maybe add partial. if ( isset( $setting['partial'] ) && ! empty( $setting['partial'] ) ) { self::maybe_add_partial( $wp_customize, $setting_key, $setting ); } // Maybe add choices. if ( isset( $setting['choices'] ) && ! empty( $setting['choices'] ) ) { self::maybe_add_choices( $setting_key, $setting ); } // Get control class name (none, color, upload, image). if ( isset( $setting['control_type'] ) && ! empty( $setting['control_type'] ) ) { if ( substr( $setting['control_type'], 0, 8 ) === 'kadence_' ) { $control_class = 'Kadence_Control_' . ucfirst( str_replace( 'kadence_', '', str_replace( '_control', '', $setting['control_type'] ) ) ); } else { $control_class = 'WP_Customize_' . ucfirst( $setting['control_type'] ) . '_Control'; } } else { $control_class = 'WP_Customize_Control'; } if ( isset( $setting['settings'] ) && false === $setting['settings'] ) { $control_config = array( 'settings' => array(), 'priority' => isset( $setting['priority'] ) ? $setting['priority'] : 10, ); } else { // Control configuration. $control_config = array( 'settings' => $setting_key, 'capability' => self::get_capability(), 'priority' => isset( $setting['priority'] ) ? $setting['priority'] : 10, 'active_callback' => ( isset( $setting['active_callback'] ) ? array( $this, 'active_callback' ) : '__return_true' ), ); } // Title. if ( ! empty( $setting['label'] ) ) { $control_config['label'] = $setting['label']; } // Description. if ( ! empty( $setting['description'] ) ) { $control_config['description'] = $setting['description']; } // Add control to section. if ( ! empty( $setting['section'] ) ) { $control_config['section'] = ( 'title_tagline' === $setting['section'] || 'static_front_page' === $setting['section'] || 'sidebar-widgets-product-filter' === $setting['section'] || 'sidebar-widgets-header1' === $setting['section'] || 'sidebar-widgets-header2' === $setting['section'] || 'sidebar-widgets-footer1' === $setting['section'] || 'sidebar-widgets-footer2' === $setting['section'] || 'sidebar-widgets-footer3' === $setting['section'] || 'sidebar-widgets-footer4' === $setting['section'] || 'sidebar-widgets-footer5' === $setting['section'] || 'sidebar-widgets-footer6' === $setting['section'] || 'woocommerce_product_catalog' === $setting['section'] || 'woocommerce_product_catalog_design' === $setting['section'] || 'woocommerce_store_notice' === $setting['section'] || 'woocommerce_store_notice_design' === $setting['section'] ? $setting['section'] : 'kadence_customizer_' . $setting['section'] ); // Undo widgets if using gutenberg plugin or 5.8 beta. if ( ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.6.2', '>' ) ) || version_compare( substr( get_bloginfo( 'version' ), 0, 3 ), '5.8', '>=' ) ) { if ( 'sidebar-widgets-footer1' === $setting['section'] || 'sidebar-widgets-footer2' === $setting['section'] || 'sidebar-widgets-footer3' === $setting['section'] || 'sidebar-widgets-footer4' === $setting['section'] || 'sidebar-widgets-footer5' === $setting['section'] || 'sidebar-widgets-footer6' === $setting['section'] || 'sidebar-widgets-header1' === $setting['section'] || 'sidebar-widgets-header2' === $setting['section'] || 'sidebar-widgets-product-filter' === $setting['section'] ) { $control_config['section'] = 'kadence_customizer_' . $setting['section']; } } } // Add control to panel. if ( ! empty( $setting['panel'] ) ) { if ( 'woocommerce' === $control_config['panel'] ) { $control_config['panel'] = $setting['panel']; } elseif ( 'tribe_customizer' === $control_config['panel'] ) { $control_config['panel'] = $setting['panel']; } else { $control_config['panel'] = 'kadence_customizer_' . $setting['panel']; } } // Add custom field type. if ( ! empty( $setting['type'] ) ) { $control_config['type'] = $setting['type']; } // Add select field options. if ( ! empty( $setting['choices'] ) ) { $control_config['choices'] = $setting['choices']; } // Defaults. if ( ! empty( $setting['default'] ) ) { $control_config['default'] = $setting['default']; } // Input attributes. if ( ! empty( $setting['input_attrs'] ) ) { $control_config['input_attrs'] = $setting['input_attrs']; } // Input attributes. if ( ! empty( $setting['mime_type'] ) ) { $control_config['mime_type'] = $setting['mime_type']; } // Builder. if ( ! empty( $setting['labels'] ) ) { $control_config['labels'] = $setting['labels']; } if ( isset( $setting['settings'] ) && ! empty( $setting['settings'] ) && is_array( $setting['settings'] ) ) { $settings_array = array(); foreach ( $setting['settings'] as $s_key => $s_id ) { $settings_array[ $s_key ] = $s_id; } $control_config['settings'] = $settings_array; } if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', $setting_key ) ) ) { $setting_key = $opt_name_key . '[' . $setting_key . ']'; if ( isset( $setting['settings'] ) && ! empty( $setting['settings'] ) && is_array( $setting['settings'] ) ) { $settings_array = array(); foreach ( $setting['settings'] as $s_key => $s_id ) { $settings_array[ $s_key ] = $opt_name_key . '[' . $s_id . ']'; } $control_config['settings'] = $settings_array; } else { if ( isset( $setting['settings'] ) && false === $setting['settings'] ) { $control_config['settings'] = array(); } else { $control_config['settings'] = $setting_key; } } } // Add control. $wp_customize->add_control( new $control_class( $wp_customize, $setting_key, $control_config ) ); } } /** * Call back to hide or show field. * * @access public * @param object $object the customizer object. */ public static function active_callback( $object ) { if ( ! isset( $object->setting->id ) && 'kadence_builder_control' !== $object->type ) { return true; } if ( 'kadence_builder_control' === $object->type ) { $id = str_replace( kadence()->get_option_name() . '_', '', $object->id ); } else { $opt_name = explode( '[', $object->setting->id ); $opt_name = $opt_name[0]; $id = str_replace( $opt_name . '[', '', str_replace( ']', '', $object->setting->id ) ); } $settings = self::$settings; if ( ! isset( $settings[ $id ] ) ) { return true; } $show = true; if ( ! isset( $settings[ $id ]['active_callback'][0] ) && 3 === count( $settings[ $id ]['active_callback'] ) ) { $field_id = $settings[ $id ]['active_callback']['id']; $compare = $settings[ $id ]['active_callback']['compare']; $value = $settings[ $id ]['active_callback']['value']; $field_value = kadence()->option( $field_id ); $show = self::active_callback_compare( $compare, $value, $field_value ); } elseif ( is_array( $settings[ $id ]['active_callback'][0] ) ) { foreach ( $settings[ $id ]['active_callback'] as $required ) { $field_id = $required['id']; $compare = $required['compare']; $value = $required['value']; $field_value = kadence()->option( $field_id ); $show = self::active_callback_compare( $compare, $value, $field_value ); if ( ! $show ) { return false; } } } return $show; } /** * Call back to compare. * * @access public * @param string $compare the compare item. * @param string $value the first item. * @param string $field_value the second item. */ public static function active_callback_compare( $compare, $value, $field_value ) { $show = true; switch ( $compare ) { case '==': case '=': case 'equals': case 'equal': if ( is_array( $value ) ) { foreach ( $value as $sub_value ) { if ( $field_value === $sub_value ) { $show = true; break; } else { $show = false; } } } else { $show = ( $field_value === $value ) ? true : false; } break; case '!=': case 'not equal': $show = ( $field_value !== $value ) ? true : false; break; } return $show; } /** * Get Builder Choices. * * @access public */ public static function get_builder_choices() { return apply_filters( 'kadence_theme_customizer_control_choices', self::$choices ); } /** * Enqueue Customizer scripts * * @access public * @return void */ public function enqueue_customizer_scripts() { // Make it possible to prevent gutenberg from loading in the customizer for plugins that are using the customizer for other purposes. if ( isset( $_GET['wpum_email_customizer'] ) || apply_filters( 'prevent_kadence_customizer_scripts', false ) ) { return; } $palette_presets = '{"basic":[{"color":"#2B6CB0"},{"color":"#215387"},{"color":"#222222"},{"color":"#3B3B3B"},{"color":"#515151"},{"color":"#626262"},{"color":"#E1E1E1"},{"color":"#F7F7F7"},{"color":"#ffffff"}],"palette":[{"color":"#255FDD"},{"color":"#00F2FF"},{"color":"#1A202C"},{"color":"#2D3748"},{"color":"#4A5568"},{"color":"#718096"},{"color":"#EDF2F7"},{"color":"#F7FAFC"},{"color":"#ffffff"}],"first-palette":[{"color":"#3296ff"},{"color":"#003174"},{"color":"#ffffff"},{"color":"#f7fafc"},{"color":"#edf2f7"},{"color":"#cbd2d9"},{"color":"#1A202C"},{"color":"#252c39"},{"color":"#2D3748"}],"orange":[{"color":"#e47b02"},{"color":"#ed8f0c"},{"color":"#1f2933"},{"color":"#3e4c59"},{"color":"#52606d"},{"color":"#7b8794"},{"color":"#f3f4f7"},{"color":"#f9f9fb"},{"color":"#ffffff"}],"third-palette":[{"color":"#E21E51"},{"color":"#4d40ff"},{"color":"#040037"},{"color":"#032075"},{"color":"#514d7c"},{"color":"#666699"},{"color":"#deddeb"},{"color":"#efeff5"},{"color":"#f8f9fa"}],"forth-palette":[{"color":"#E21E51"},{"color":"#4d40ff"},{"color":"#f8f9fa"},{"color":"#efeff5"},{"color":"#deddeb"},{"color":"#c3c2d6"},{"color":"#040037"},{"color":"#221e5b"},{"color":"#514D7C"}],"fifth-palette":[{"color":"#049f82"},{"color":"#008f72"},{"color":"#222222"},{"color":"#353535"},{"color":"#454545"},{"color":"#676767"},{"color":"#eeeeee"},{"color":"#f7f7f7"},{"color":"#ffffff"}],"sixth-palette":[{"color":"#dd6b20"},{"color":"#cf3033"},{"color":"#27241d"},{"color":"#423d33"},{"color":"#504a40"},{"color":"#625d52"},{"color":"#e8e6e1"},{"color":"#faf9f7"},{"color":"#ffffff"}]}'; $fonts = array( array( 'name' => 'Montserrat & Source Sans Pro', 'hfont' => 'Montserrat', 'bfont' => 'Source Sans Pro', 'hv' => array( '100', '100italic', '200', '200italic', '300', '300italic', 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/montserrat.jpg', ), array( 'name' => 'Libre Franklin & Libre Baskerville', 'hfont' => 'Libre Franklin', 'bfont' => 'Libre Baskerville', 'hv' => array( '100', '100italic', '200', '200italic', '300', '300italic', 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/libre.jpg', ), array( 'name' => 'Proza Libre & Open Sans', 'hfont' => 'Proza Libre', 'bfont' => 'Open Sans', 'hv' => array( 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/proza.jpg', ), array( 'name' => 'Work Sans & Work Sans', 'hfont' => 'Work Sans', 'bfont' => 'Work Sans', 'hv' => array( '100', '100italic', '200', '200italic', '300', '300italic', 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/worksans.jpg', ), array( 'name' => 'Josefin Sans & Lato', 'hfont' => 'Josefin Sans', 'bfont' => 'Lato', 'hv' => array( '100', '100italic', '200', '200italic', '300', '300italic', 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/josefin.jpg', ), array( 'name' => 'Oswald & Open Sans', 'hfont' => 'Oswald', 'bfont' => 'Open Sans', 'hv' => array( '200', '300', 'regular', '500', '600', '700' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/oswald.jpg', ), array( 'name' => 'Nunito & Roboto', 'hfont' => 'Nunito', 'bfont' => 'Roboto', 'hv' => array( '200', '200italic', '300', '300italic', 'regular', 'italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/nunito.jpg', ), array( 'name' => 'Rubik & Karla', 'hfont' => 'Rubik', 'bfont' => 'Karla', 'hv' => array( '300', '300italic', 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/rubik.jpg', ), array( 'name' => 'Lora & Merriweather', 'hfont' => 'Lora', 'bfont' => 'Merriweather', 'hv' => array( 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/lora.jpg', ), array( 'name' => 'Playfair Display & Raleway', 'hfont' => 'Playfair Display', 'bfont' => 'Raleway', 'hv' => array( 'regular', 'italic', '500', '500italic', '600', '600italic', '700', '700italic', '800', '800italic', '900', '900italic' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/playfair.jpg', ), array( 'name' => 'Antic Didone & Raleway', 'hfont' => 'Antic Didone', 'bfont' => 'Raleway', 'hv' =>array( 'regular' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/antic.jpg', ), array( 'name' => 'Gilda Display & Raleway', 'hfont' => 'Gilda Display', 'bfont' => 'Raleway', 'hv' => array( 'regular' ), 'img' => get_template_directory_uri() . '/assets/images/fonts/gilda.jpg', ), ); $path = get_template_directory_uri() . '/inc/customizer/'; $dir_path = get_template_directory() . '/inc/customizer/'; wp_enqueue_style( 'kadence-customizer-styles', $path . 'css/kadence-customizer.css', false, KADENCE_VERSION ); if ( is_rtl() ) { wp_enqueue_style( 'kadence-customizer-rtl', $path . 'css/rtl-kadence-customizer.css', false, KADENCE_VERSION ); } // Enqueue Customizer script. $google_font_variants = include $dir_path . 'google-font-variants.php'; $editor_dependencies = array( 'jquery', 'customize-controls', 'wp-i18n', 'wp-components', 'wp-edit-post', 'wp-element', 'lodash', 'react', 'react-dom', 'wp-compose', 'wp-polyfill', 'wp-primitives', ); // Overide Core Text scripts because of naming issues. wp_enqueue_script( 'customizer-text-widgets', get_template_directory_uri() . '/assets/js/text-widgets.min.js', array( 'jquery', 'backbone', 'editor', 'wp-util', 'wp-a11y', 'text-widgets' ), KADENCE_VERSION, false ); wp_enqueue_script( 'kadence-customizer-controls', get_template_directory_uri() . '/assets/js/admin/customizer.js', $editor_dependencies, KADENCE_VERSION, true ); wp_enqueue_style( 'kadence-customizer-controls', $path . 'react/build/controls.css', array( 'wp-components' ), KADENCE_VERSION ); wp_localize_script( 'kadence-customizer-controls', 'kadenceCustomizerControlsData', array( 'contexts' => self::get_control_contexts(), 'choices' => self::get_builder_choices(), 'palette' => kadence()->get_palette_for_customizer(), 'gfontvars' => $google_font_variants, 'cfontvars' => apply_filters( 'kadence_theme_custom_fonts', array() ), 'palettePresets' => apply_filters( 'kadence_theme_palette_presets', $palette_presets ), 'flushFonts' => wp_create_nonce( 'kadence-local-fonts-flush' ), 'fontPairs' => apply_filters( 'kadence_font_pairs_array', $fonts ), 'source' => apply_filters( 'kadence_settings_extra_source', false ), 'blockWidgets' => ( ( defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, '10.6.2', '>' ) ) || version_compare( substr( get_bloginfo( 'version' ), 0, 3 ), '5.8', '>=' ) ? true : false ), ) ); $css = ':root { --global-palette1: ' . kadence()->palette_option( 'palette1' ) . '; --global-palette2: ' . kadence()->palette_option( 'palette2' ) . '; --global-palette3: ' . kadence()->palette_option( 'palette3' ) . '; --global-palette4: ' . kadence()->palette_option( 'palette4' ) . '; --global-palette5: ' . kadence()->palette_option( 'palette5' ) . '; --global-palette6: ' . kadence()->palette_option( 'palette6' ) . '; --global-palette7: ' . kadence()->palette_option( 'palette7' ) . '; --global-palette8: ' . kadence()->palette_option( 'palette8' ) . '; --global-palette9: ' . kadence()->palette_option( 'palette9' ) . '; --global-palette-highlight: ' . $this->render_color( kadence()->sub_option( 'link_color', 'highlight' ) ) . '; --global-palette-highlight-alt: ' . $this->render_color( kadence()->sub_option( 'link_color', 'highlight-alt' ) ) . '; --global-palette-highlight-alt2: ' . $this->render_color( kadence()->sub_option( 'link_color', 'highlight-alt2' ) ) . '; --global-palette-btn: ' . $this->render_color( kadence()->sub_option( 'buttons_color', 'color' ) ) . '; --global-palette-btn-hover: ' . $this->render_color( kadence()->sub_option( 'buttons_color', 'hover' ) ) . '; --global-palette-btn-bg: ' . $this->render_color_or_gradient( kadence()->sub_option( 'buttons_background', 'color' ) ) . '; --global-palette-btn-bg-hover: ' . $this->render_color_or_gradient( kadence()->sub_option( 'buttons_background', 'hover' ) ) . '; --global-base-font: ' . kadence()->sub_option( 'base_font', 'family' ) . '; --global-heading-font: ' . ( 'inherit' !== kadence()->sub_option( 'heading_font', 'family' ) ? kadence()->sub_option( 'heading_font', 'family' ) : 'var(--global-base-font)' ) . '; }'; wp_add_inline_style( 'kadence-customizer-controls', wp_strip_all_tags( $css ) ); if ( function_exists( 'wp_set_script_translations' ) ) { wp_set_script_translations( 'kadence-customizer-controls', 'kadence' ); } } /** * Generates the color output. * * @param string $color any color attribute. * @return string */ public function render_color_or_gradient( $color ) { if ( empty( $color ) ) { return false; } if ( ! is_array( $color ) && 'palette' === substr( $color, 0, 7 ) ) { $color = 'var(--global-' . $color . ')'; } return $color; } /** * Generates the color output. * * @param string $color any color attribute. * @return string */ public function render_color( $color ) { if ( empty( $color ) ) { return false; } if ( ! is_array( $color ) && strpos( $color, 'palette' ) !== false ) { $color = 'var(--global-' . $color . ')'; } return $color; } /** * Enqueues JavaScript to make Customizer preview reload changes asynchronously. */ public function action_enqueue_customize_preview_scripts() { $path = get_template_directory_uri() . '/inc/customizer/'; wp_enqueue_style( 'kadence-customizer-preview', $path . 'css/kadence-customizer-preview.css', false, KADENCE_VERSION ); wp_enqueue_script( 'kadence-webfont-js', 'https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js', array( 'jquery' ), '1.6.26', true ); wp_enqueue_script( 'kadence-customizer-preview', $path . 'js/kadence-customizer-preview.min.js', array( 'customize-preview' ), KADENCE_VERSION, true ); wp_localize_script( 'kadence-customizer-preview', 'kadenceCustomizerPreviewData', array( 'liveControl' => self::get_live_control_data(), ) ); } /** * Get Customizer Control Contexts * * @access public * @return array */ public static function get_control_contexts() { // Return contexts. return apply_filters( 'kadence_theme_customizer_control_contexts', self::$contexts ); } /** * Get Customizer Live Control Data * * @access public * @return array */ public static function get_live_control_data() { // Return contexts. return apply_filters( 'kadence_theme_customizer_live_control_data', self::$live_control ); } /** * Maybe add Context * * @access public * @param string $setting_key the item setting key. * @param array $setting the item setting. * @return void */ public static function maybe_add_context( $setting_key, $setting ) { if ( isset( $setting['context'] ) && ! empty( $setting['context'] ) ) { // Add to contexts array. if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', $setting_key ) ) ) { $setting_key = $opt_name_key . '[' . $setting_key . ']'; } self::$contexts[ $setting_key ] = $setting['context']; } } /** * Maybe add Live Control Data * * @access public * @param string $setting_key the item setting key. * @param array $setting the item setting. * @return void */ public static function maybe_add_live( $setting_key, $setting ) { if ( isset( $setting['live_method'] ) && ! empty( $setting['live_method'] ) ) { // Add to live_method array. $setting_id = $setting_key; if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', $setting_key ) ) ) { $setting_id = $opt_name_key . '[' . $setting_key . ']'; } if ( isset( $setting['settings'] ) && is_array( $setting['settings'] ) ) { self::$live_control[ $setting_id ] = $setting['live_method'][ $setting_key ]; } else { self::$live_control[ $setting_id ] = $setting['live_method']; } } } /** * Maybe add Partial Control Data * * @access public * @param object $wp_customize the object. * @param string $setting_key the item setting key. * @param array $setting the item setting. * @return void */ public static function maybe_add_partial( $wp_customize, $setting_key, $setting ) { if ( isset( $setting['partial'] ) && ! empty( $setting['partial'] ) ) { if ( isset( $wp_customize->selective_refresh ) ) { if ( ! empty( $opt_name_key = apply_filters( 'kadence_settings_key_custom_mapping', '', $setting_key ) ) ) { $setting_key = $opt_name_key . '[' . $setting_key . ']'; } $wp_customize->selective_refresh->add_partial( $setting_key, $setting['partial'] ); } } } /** * Maybe add Choices * * @access public * @param string $setting_key the item setting key. * @param array $setting the item setting. * @return void */ public static function maybe_add_choices( $setting_key, $setting ) { if ( isset( $setting['choices'] ) && ! empty( $setting['choices'] ) ) { // Add to choices array. self::$choices[ $setting_key ] = $setting['choices']; } } /** * Show footer widgets as active * * @param bool $active wether the panel is active. * @param object $section the section object. */ public function active_footer_widgets( $active, $section ) { if ( strpos( $section->id, 'widgets-footer' ) ) { $active = true; } return $active; } } Theme_Customizer::get_instance();