add_section( 'baton_conductor', array( 'priority' => 40, 'title' => __( 'Blog Display', 'baton' ), 'description' => sprintf( __( 'This is a preview of our Conductor Widget. Install our Conductor plugin for even better ways to control your content.', 'baton' ), esc_url( 'https://conductorplugin.com/?utm_source=baton&utm_medium=link&utm_content=baton-conductor&utm_campaign=baton' ) ), //'active_callback' => array( $this, 'is_front_page_sidebar_active' ) ) ); /* * Settings */ // Disabled $wp_customize->add_setting( 'baton_conductor[disabled]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_disabled', $baton_conductor->defaults['disabled'] ), 'sanitize_callback' => 'baton_boolval' ) ); // Title $wp_customize->add_setting( 'baton_conductor[title]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_title', $baton_conductor->defaults['title'] ), 'sanitize_callback' => 'sanitize_text_field' ) ); // Posts Per Page $wp_customize->add_setting( 'baton_conductor[posts_per_page]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_posts_per_page', $baton_conductor->defaults['posts_per_page'] ), 'sanitize_callback' => 'absint' ) ); // Category $wp_customize->add_setting( 'baton_conductor[category]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_category', $baton_conductor->defaults['category'] ), 'sanitize_callback' => 'absint' ) ); // Flexbox $wp_customize->add_setting( 'baton_conductor[flexbox_columns]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_flexbox_columns', $baton_conductor->defaults['flexbox_columns'] ), 'sanitize_callback' => 'absint' ) ); // Output $wp_customize->add_setting( 'baton_conductor[output]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_output', $baton_conductor->defaults['output'] ), 'sanitize_callback' => array( $this, 'sanitize_output' ), 'sanitize_js_callback' => array( $this, 'sanitize_js_output' ) ) ); // Excerpt Length $wp_customize->add_setting( 'baton_conductor[excerpt_length]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_excerpt_length', $baton_conductor->defaults['excerpt_length'] ), 'sanitize_callback' => 'absint' ) ); // Featured Image Size $wp_customize->add_setting( 'baton_conductor[post_thumbnails_size]', array( 'default' => apply_filters( 'theme_mod_baton_conductor_post_thumbnails_size', $baton_conductor->defaults['post_thumbnails_size'] ), 'sanitize_callback' => 'sanitize_text_field' ) ); /* * Controls */ // Disabled $wp_customize->add_control( new SDS_Theme_Options_Customize_Checkbox_Control( $wp_customize, 'baton_conductor[disabled]', // IDs can have nested array keys array( 'label' => __( 'Enable', 'baton' ), 'section' => 'baton_conductor', 'settings' => 'baton_conductor[disabled]', 'priority' => 10, 'type' => 'checkbox', // Used in js controller 'css_class' => 'baton-conductor-disabled', 'css_id' => 'baton_conductor_disabled', 'checked_label' => __( 'Yes', 'baton' ), 'unchecked_label' => __( 'No', 'baton' ), 'style' => array( 'before' => 'width: 38%; text-align: center;', 'after' => 'right: 0; width: 38%; padding: 0 6px; text-align: center;' ) ) ) ); // Conductor $wp_customize->add_control( new Baton_Customize_Conductor_Control( $wp_customize, 'baton_conductor', array( 'label' => __( 'Conductor', 'baton' ), 'section' => 'baton_conductor', 'settings' => array( 'title' => 'baton_conductor[title]', 'posts_per_page' => 'baton_conductor[posts_per_page]', 'category' => 'baton_conductor[category]', 'flexbox_columns' => 'baton_conductor[flexbox_columns]', 'output' => 'baton_conductor[output]', 'post_thumbnails_size' => 'baton_conductor[post_thumbnails_size]', 'excerpt_length' => 'baton_conductor[excerpt_length]' ), 'priority' => 20, 'active_callback' => array( $this, 'is_baton_conductor_enabled' ) ) ) ); } /********************** * Internal Functions * **********************/ /** * This function sanitizes Baton Conductor data. */ public function sanitize_output( $input ) { $output_elements = ( ! empty( $input ) ) ? json_decode( $input, true ) : false; if ( ! empty( $output_elements ) ) { $callback_prefix = apply_filters( 'baton_conductor_query_callback_prefix', 'baton_conductor_', $input ); // Callback function prefix // Reset the output array first $input = array(); // Loop through each output element foreach ( $output_elements as $priority => $element ) { $the_priority = ( int ) $priority; $id = sanitize_text_field( $element['id'] ); // Create a sanitized array of data $input[$the_priority] = array( 'id' => $id, 'priority' => $the_priority, 'label' => sanitize_text_field( $element['label'] ), 'type' => sanitize_text_field( $element['type'] ), 'visible' => ( $element['visible'] ), 'callback' => $callback_prefix . $id ); // Link if ( isset( $element['link'] ) ) $input[$the_priority]['link'] = ( $element['link'] ) ? true: false; // Content if ( $element['type'] === 'content' ) $input[$the_priority]['value'] = ( isset( $element['value'] ) && ! empty( $element['value']) ) ? sanitize_text_field( $element['value'] ) : 'content'; // Default to content } } return $input; } /** * This function sanitizes Baton Conductor data on the front-end. */ public function sanitize_js_output( $input ) { return json_encode( $input ); } /** * This function determines if the Front Page Sidebar is active. */ public function is_front_page_sidebar_active() { return ( is_active_sidebar( 'front-page-sidebar' ) ); } /** * This function determines if Baton Conductor functionality is enabled. */ public function is_baton_conductor_enabled() { // Grab the Baton Conductor theme mod $baton_conductor = Baton_Conductor_Instance(); $baton_conductor_theme_mod = get_theme_mod( 'baton_conductor', $baton_conductor->defaults ); $baton_conductor_theme_mod = wp_parse_args( $baton_conductor_theme_mod, $baton_conductor->defaults ); // Parse any saved arguments into defaults return ! $baton_conductor_theme_mod['disabled']; } } function Baton_Conductor_Customizer_Instance() { return Baton_Conductor_Customizer::instance(); } // Starts Baton Customizer Baton_Conductor_Customizer_Instance(); }