sprintf( esc_html__( 'Theme: %1$s by %2$s.', 'blogbook' ), 'Blogbook', 'Moral Themes' ), ); return apply_filters( 'blogbook_default_mods', $blogbook_default_mods ); } /** * Add postMessage support for site title and description for the Theme Customizer. * * @param WP_Customize_Manager $wp_customize Theme Customizer object. */ function blogbook_customize_register( $wp_customize ) { $default = blogbook_get_default_mods(); $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 a', 'render_callback' => 'blogbook_customize_partial_blogname', ) ); $wp_customize->selective_refresh->add_partial( 'blogdescription', array( 'selector' => '.site-description', 'render_callback' => 'blogbook_customize_partial_blogdescription', ) ); } /** * * * Header panel * * */ // Header panel $wp_customize->add_panel( 'blogbook_header_panel', array( 'title' => esc_html__( 'Header', 'blogbook' ), 'priority' => 100 ) ); $wp_customize->get_section( 'title_tagline' )->panel = 'blogbook_header_panel'; // Header text display setting $wp_customize->add_setting( 'blogbook_header_text_display', array( 'sanitize_callback' => 'blogbook_sanitize_checkbox', 'default' => true, 'transport' => 'postMessage', ) ); $wp_customize->add_control( 'blogbook_header_text_display', array( 'section' => 'title_tagline', 'type' => 'checkbox', 'label' => esc_html__( 'Display Site Title and Tagline', 'blogbook' ), ) ); /** * * General settings panel * */ // General settings panel $wp_customize->add_panel( 'blogbook_general_panel', array( 'title' => esc_html__( 'Advanced Settings', 'blogbook' ), 'priority' => 107 ) ); $wp_customize->get_section( 'colors' )->panel = 'blogbook_general_panel'; // Header title color setting $wp_customize->add_setting( 'blogbook_header_title_color', array( 'sanitize_callback' => 'blogbook_sanitize_hex_color', 'default' => '#5376bb', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'blogbook_header_title_color', array( 'section' => 'colors', 'label' => esc_html__( 'Site title Color:', 'blogbook' ), ) ) ); // Header tagline color setting $wp_customize->add_setting( 'blogbook_header_tagline', array( 'sanitize_callback' => 'blogbook_sanitize_hex_color', 'default' => '#7b7b7b', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'blogbook_header_tagline', array( 'section' => 'colors', 'label' => esc_html__( 'Site tagline Color:', 'blogbook' ), ) ) ); $wp_customize->get_section( 'background_image' )->panel = 'blogbook_general_panel'; $wp_customize->get_section( 'custom_css' )->panel = 'blogbook_general_panel'; /** * General settings */ // General settings $wp_customize->add_section( 'blogbook_general_section', array( 'title' => esc_html__( 'General', 'blogbook' ), 'panel' => 'blogbook_general_panel', ) ); // Backtop enable setting $wp_customize->add_setting( 'blogbook_back_to_top_enable', array( 'sanitize_callback' => 'blogbook_sanitize_checkbox', 'default' => true, ) ); $wp_customize->add_control( 'blogbook_back_to_top_enable', array( 'section' => 'blogbook_general_section', 'label' => esc_html__( 'Enable Scroll up.', 'blogbook' ), 'type' => 'checkbox', ) ); /** * Blog/Archive section */ // Blog/Archive section $wp_customize->add_section( 'blogbook_archive_settings', array( 'title' => esc_html__( 'Archive/Blog', 'blogbook' ), 'description' => esc_html__( 'Settings for archive pages including blog page too.', 'blogbook' ), 'panel' => 'blogbook_general_panel', ) ); // Archive excerpt setting $wp_customize->add_setting( 'blogbook_archive_excerpt', array( 'sanitize_callback' => 'sanitize_text_field', 'default' => esc_html__( 'Read More', 'blogbook' ), ) ); $wp_customize->add_control( 'blogbook_archive_excerpt', array( 'section' => 'blogbook_archive_settings', 'label' => esc_html__( 'Excerpt more text:', 'blogbook' ), ) ); // Archive excerpt length setting $wp_customize->add_setting( 'blogbook_archive_excerpt_length', array( 'sanitize_callback' => 'blogbook_sanitize_number_range', 'default' => 60, ) ); $wp_customize->add_control( 'blogbook_archive_excerpt_length', array( 'section' => 'blogbook_archive_settings', 'label' => esc_html__( 'Excerpt more length:', 'blogbook' ), 'type' => 'number', 'input_attrs' => array( 'min' => 5 ), ) ); // Pagination type setting $wp_customize->add_setting( 'blogbook_archive_pagination_type', array( 'sanitize_callback' => 'blogbook_sanitize_select', 'default' => 'numeric', ) ); $archive_pagination_description = ''; $archive_pagination_choices = array( 'disable' => esc_html__( '--Disable--', 'blogbook' ), 'numeric' => esc_html__( 'Numeric', 'blogbook' ), 'older_newer' => esc_html__( 'Older / Newer', 'blogbook' ), ); if ( ! class_exists( 'JetPack' ) ) { $archive_pagination_description = sprintf( esc_html__( 'We recommend to install %1$sJetpack%2$s and enable %3$sInfinite Scroll%4$s feature for automatic loading of posts.', 'blogbook' ), '', '', '', '' ); } else { $archive_pagination_choices['infinite_scroll'] = esc_html__( 'Infinite Load', 'blogbook' ); } $wp_customize->add_control( 'blogbook_archive_pagination_type', array( 'section' => 'blogbook_archive_settings', 'label' => esc_html__( 'Pagination type:', 'blogbook' ), 'description' => $archive_pagination_description, 'type' => 'select', 'choices' => $archive_pagination_choices, ) ); } add_action( 'customize_register', 'blogbook_customize_register' ); /** * Render the site title for the selective refresh partial. * * @return void */ function blogbook_customize_partial_blogname() { bloginfo( 'name' ); } /** * Render the site tagline for the selective refresh partial. * * @return void */ function blogbook_customize_partial_blogdescription() { bloginfo( 'description' ); } /** * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. */ function blogbook_customize_preview_js() { wp_enqueue_script( 'blogbook-customizer', get_theme_file_uri( '/assets/js/customizer.js' ), array( 'customize-preview' ), '20151215', true ); } add_action( 'customize_preview_init', 'blogbook_customize_preview_js' ); /** * * Sanitization callbacks. * */ /** * Checkbox sanitization callback example. * * Sanitization callback for 'checkbox' type controls. This callback sanitizes `$checked` * as a boolean value, either TRUE or FALSE. * * @param bool $checked Whether the checkbox is checked. * @return bool Whether the checkbox is checked. */ function blogbook_sanitize_checkbox( $checked ) { // Boolean check. return ( ( isset( $checked ) && true == $checked ) ? true : false ); } /** * HEX Color sanitization callback example. * * - Sanitization: hex_color * - Control: text, WP_Customize_Color_Control * */ function blogbook_sanitize_hex_color( $hex_color, $setting ) { // Sanitize $input as a hex value without the hash prefix. $hex_color = sanitize_hex_color( $hex_color ); // If $input is a valid hex value, return it; otherwise, return the default. return ( ! is_null( $hex_color ) ? $hex_color : $setting->default ); } /** * Select sanitization callback example. * * - Sanitization: select * - Control: select, radio */ function blogbook_sanitize_select( $input, $setting ) { // Ensure input is a slug. $input = sanitize_key( $input ); // Get list of choices from the control associated with the setting. $choices = $setting->manager->get_control( $setting->id )->choices; // If the input is a valid key, return it; otherwise, return the default. return ( array_key_exists( $input, $choices ) ? $input : $setting->default ); } /** * Number Range sanitization callback example. * * - Sanitization: number_range * - Control: number, tel * */ function blogbook_sanitize_number_range( $number, $setting ) { // Ensure input is an absolute integer. $number = absint( $number ); // Get the input attributes associated with the setting. $atts = $setting->manager->get_control( $setting->id )->input_attrs; // Get minimum number in the range. $min = ( isset( $atts['min'] ) ? $atts['min'] : $number ); // Get maximum number in the range. $max = ( isset( $atts['max'] ) ? $atts['max'] : $number ); // Get step. $step = ( isset( $atts['step'] ) ? $atts['step'] : 1 ); // If the number is within the valid range, return it; otherwise, return the default return ( $min <= $number && $number <= $max && is_int( $number / $step ) ? $number : $setting->default ); }