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' => 'pridmag_customize_partial_blogname', ) ); $wp_customize->selective_refresh->add_partial( 'blogdescription', array( 'selector' => '.site-description', 'render_callback' => 'pridmag_customize_partial_blogdescription', ) ); } /** * Add Panels. */ $wp_customize->add_panel( 'pridmag_header_options_panel', array( 'priority' => 190, 'capability' => 'edit_theme_options', 'theme_supports' => '', 'title' => esc_html__( 'Header Options', 'pridmag' ), 'description' => esc_html__( 'Configure header settings for the PridMag Theme', 'pridmag' ), ) ); $wp_customize->add_panel( 'pridmag_layout_options_panel', array( 'priority' => 191, 'capability' => 'edit_theme_options', 'theme_supports' => '', 'title' => esc_html__( 'Layout Options', 'pridmag' ), 'description' => esc_html__( 'Configure layout settings for the PridMag Theme', 'pridmag' ), ) ); $wp_customize->add_panel( 'pridmag_blog_options_panel', array( 'priority' => 192, 'capability' => 'edit_theme_options', 'theme_supports' => '', 'title' => esc_html__( 'Archives / Blog Options', 'pridmag' ), 'description' => esc_html__( 'You can change your blog / archives settings here.', 'pridmag' ), ) ); /** * Add sections */ $wp_customize->add_section( 'pridmag_blog_meta_section', array( 'title' => esc_html__( 'Post Details', 'pridmag' ), 'description' => esc_html__( 'Select what post details to be displayed on blog and archives.', 'pridmag' ), 'panel' => 'pridmag_blog_options_panel' ) ); $wp_customize->add_section( 'pridmag_blog_excerpt_section', array( 'title' => esc_html__( 'Excerpt Length', 'pridmag' ), 'panel' => 'pridmag_blog_options_panel' ) ); $wp_customize->add_section( 'pridmag_blog_readmore_section', array( 'title' => esc_html__( 'Read More Button', 'pridmag' ), 'panel' => 'pridmag_blog_options_panel' ) ); $wp_customize->add_section( 'pridmag_singlepost_section', array( 'title' => esc_html__( 'Post Options', 'pridmag' ), 'description' => esc_html__( 'You can change your single post settings here.', 'pridmag' ), 'priority' => 193 ) ); $wp_customize->add_section( 'pridmag_footer_section', array( 'title' => esc_html__( 'Footer Options', 'pridmag' ), 'priority' => 194 ) ); $wp_customize->add_section( 'pridmag_main_layout_section', array( 'title' => esc_html__( 'Site Main Layout', 'pridmag' ), 'panel' => 'pridmag_layout_options_panel' ) ); $wp_customize->add_section( 'pridmag_blog_layout_section', array( 'title' => esc_html__( 'Archives / Blog Layout', 'pridmag' ), 'panel' => 'pridmag_layout_options_panel' ) ); $wp_customize->add_section( 'pridmag_post_layout_section', array( 'title' => esc_html__( 'Single Post Layout', 'pridmag' ), 'panel' => 'pridmag_layout_options_panel' ) ); $wp_customize->add_section( 'pridmag_page_layout_section', array( 'title' => esc_html__( 'Page Layout', 'pridmag' ), 'panel' => 'pridmag_layout_options_panel' ) ); $wp_customize->add_section( 'pridmag_header_image_section', array( 'title' => esc_html__( 'Header Image Options', 'pridmag' ), 'panel' => 'pridmag_header_options_panel' ) ); $wp_customize->add_section( 'pridmag_search_section', array( 'title' => esc_html__( 'Search Box', 'pridmag' ), 'panel' => 'pridmag_header_options_panel' ) ); $wp_customize->add_section( 'pridmag_themeinfo_section', array( 'title' => esc_html__( 'Theme Information', 'pridmag' ), 'priority' => 200 ) ); /** * Settings and controls. */ // Header image position $wp_customize->add_setting( 'pridmag_header_image_position', array( 'default' => 'before-header', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( 'pridmag_header_image_position', array( 'settings' => 'pridmag_header_image_position', 'section' => 'pridmag_header_image_section', 'type' => 'radio', 'label' => esc_html__( 'Header Image Location.', 'pridmag' ), 'choices' => array( 'before-header' => esc_html__( 'Before Header', 'pridmag' ), 'after-header' => esc_html__( 'After Header', 'pridmag' ) ) ) ); // Link Header Image. $wp_customize->add_setting( 'pridmag_link_header_image', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_link_header_image', array( 'settings' => 'pridmag_link_header_image', 'section' => 'pridmag_header_image_section', 'type' => 'checkbox', 'label' => esc_html__( 'Link header image to home page.', 'pridmag' ) ) ); // Show search $wp_customize->add_setting( 'pridmag_show_search', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_show_search', array( 'settings' => 'pridmag_show_search', 'section' => 'pridmag_search_section', 'type' => 'checkbox', 'label' => esc_html__( 'Show search icon on menu.', 'pridmag' ) ) ); /** * Site Main layout. */ $wp_customize->add_setting( 'pridmag_site_main_layout', array( 'default' => 'boxed-layout', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( 'pridmag_site_main_layout', array( 'settings' => 'pridmag_site_main_layout', 'section' => 'pridmag_main_layout_section', 'type' => 'radio', 'label' => esc_html__( 'Select the main layout for the site.', 'pridmag' ), 'choices' => array( 'boxed-layout' => esc_html__( 'Boxed Layout', 'pridmag' ), 'wide-layout' => esc_html__( 'Wide Layout', 'pridmag' ) ) ) ); /** * Blog layout. */ // Sidebar and content alignment $wp_customize->add_setting( 'pridmag_archive_sidebar_align', array( 'default' => 'th-right-sidebar', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( new PridMag_Radio_Image_Control( $wp_customize, 'pridmag_archive_sidebar_align', array( 'settings' => 'pridmag_archive_sidebar_align', 'section' => 'pridmag_blog_layout_section', 'label' => esc_html__( 'Archives / Blog Layout', 'pridmag' ), 'description' => esc_html__( 'Select content and sidebar alignment for blog posts listing pages.', 'pridmag' ), 'choices' => array( 'th-right-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cr.png', 'th-left-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cl.png', 'th-no-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1c.png', 'th-content-centered' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1cc.png' ) ) ) ); // Blog posts layout. $wp_customize->add_setting( 'pridmag_post_listing_layout', array( 'default' => 'th-list-posts', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( 'pridmag_post_listing_layout', array( 'settings' => 'pridmag_post_listing_layout', 'section' => 'pridmag_blog_layout_section', 'type' => 'radio', 'label' => esc_html__( 'Posts Listing Layout', 'pridmag' ), 'choices' => array( 'th-list-posts' => esc_html__( 'List posts', 'pridmag' ), 'th-grid-2' => esc_html__( '2 Columns Grid', 'pridmag' ), 'th-grid-3' => esc_html__( '3 Columns Grid', 'pridmag' ), 'th-large-posts' => esc_html__( 'Large posts', 'pridmag' ) ) ) ); /** * Single Post Layout */ $wp_customize->add_setting( 'pridmag_post_sidebar_align', array( 'default' => 'th-right-sidebar', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( new PridMag_Radio_Image_Control( $wp_customize, 'pridmag_post_sidebar_align', array( 'settings' => 'pridmag_post_sidebar_align', 'section' => 'pridmag_post_layout_section', 'label' => esc_html__( 'Single Post Layout', 'pridmag' ), 'description' => esc_html__( 'Select content and sidebar alignment for posts.', 'pridmag' ), 'choices' => array( 'th-right-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cr.png', 'th-left-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cl.png', 'th-no-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1c.png', 'th-content-centered' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1cc.png' ) ) ) ); /** * Page Layout */ $wp_customize->add_setting( 'pridmag_page_sidebar_align', array( 'default' => 'th-right-sidebar', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( new PridMag_Radio_Image_Control( $wp_customize, 'pridmag_page_sidebar_align', array( 'settings' => 'pridmag_page_sidebar_align', 'section' => 'pridmag_page_layout_section', 'label' => esc_html__( 'Page Layout', 'pridmag' ), 'description' => esc_html__( 'Select content and sidebar alignment for pages.', 'pridmag' ), 'choices' => array( 'th-right-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cr.png', 'th-left-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/2cl.png', 'th-no-sidebar' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1c.png', 'th-content-centered' => get_template_directory_uri() . '/inc/customizer/assets/imgs/1cc.png' ) ) ) ); /** * Blog Settings. */ // Archive category list control. $wp_customize->add_setting( 'pridmag_archive_category_list', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_archive_category_list', array( 'settings' => 'pridmag_archive_category_list', 'section' => 'pridmag_blog_meta_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post category list.', 'pridmag' ) ) ); // Archive post date control. $wp_customize->add_setting( 'pridmag_archive_date', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_archive_date', array( 'settings' => 'pridmag_archive_date', 'section' => 'pridmag_blog_meta_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post date.', 'pridmag' ) ) ); // Archive post author control. $wp_customize->add_setting( 'pridmag_archive_author', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_archive_author', array( 'settings' => 'pridmag_archive_author', 'section' => 'pridmag_blog_meta_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post author.', 'pridmag' ), ) ); // Archive post comments link control. $wp_customize->add_setting( 'pridmag_archive_comments_link', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_archive_comments_link', array( 'settings' => 'pridmag_archive_comments_link', 'section' => 'pridmag_blog_meta_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display number of comments.', 'pridmag' ), ) ); // Archive excerpt control. $wp_customize->add_setting( 'pridmag_content_display_method', array( 'default' => 'excerpt', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_select' ) ); $wp_customize->add_control( 'pridmag_content_display_method', array( 'settings' => 'pridmag_content_display_method', 'section' => 'pridmag_blog_excerpt_section', 'type' => 'radio', 'label' => esc_html__( 'Content display method.', 'pridmag' ), 'description' => esc_html__( 'How content should display in blog posts listing pages? Default: Excerpt', 'pridmag' ), 'choices' => array( 'excerpt' => esc_html__( 'Excerpt', 'pridmag' ), 'full-content' => esc_html__( 'Full Content', 'pridmag' ), 'none' => esc_html__( 'Do not display', 'pridmag' ) ) ) ); // Excerpt length. $wp_customize->add_setting( 'pridmag_excerpt_length', array( 'default' => 25, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_number_absint' ) ); $wp_customize->add_control( 'pridmag_excerpt_length', array( 'settings' => 'pridmag_excerpt_length', 'section' => 'pridmag_blog_excerpt_section', 'type' => 'number', 'label' => esc_html__( 'Excerpt length', 'pridmag' ), 'description' => esc_html__( 'How many words do you want to display in excerpt? Default: 25', 'pridmag' ) ) ); // Read more button control. $wp_customize->add_setting( 'pridmag_readmore_button', array( 'default' => false, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_readmore_button', array( 'settings' => 'pridmag_readmore_button', 'section' => 'pridmag_blog_readmore_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display read more button.', 'pridmag' ), ) ); // Read more button text. $wp_customize->add_setting( 'pridmag_readmore_text', array( 'default' => esc_html__( 'Read More', 'pridmag' ), 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'sanitize_text_field' ) ); $wp_customize->add_control( 'pridmag_readmore_text', array( 'settings' => 'pridmag_readmore_text', 'section' => 'pridmag_blog_readmore_section', 'type' => 'text', 'label' => esc_html__( 'Read More Button Text', 'pridmag' ) ) ); /** * Single Post Settings */ // Single post category list control. $wp_customize->add_setting( 'pridmag_post_category_list', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_post_category_list', array( 'settings' => 'pridmag_post_category_list', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post category list.', 'pridmag' ) ) ); // Single post date control. $wp_customize->add_setting( 'pridmag_post_date', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_post_date', array( 'settings' => 'pridmag_post_date', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post date.', 'pridmag' ) ) ); // Single post author control. $wp_customize->add_setting( 'pridmag_post_author', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_post_author', array( 'settings' => 'pridmag_post_author', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display post author.', 'pridmag' ), ) ); // Single post comments link control. $wp_customize->add_setting( 'pridmag_post_comments_link', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_post_comments_link', array( 'settings' => 'pridmag_post_comments_link', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display number of comments.', 'pridmag' ), ) ); // Show/hide featured image on single post $wp_customize->add_setting( 'pridmag_single_thumbnail', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_single_thumbnail', array( 'settings' => 'pridmag_single_thumbnail', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display featured image.', 'pridmag' ), ) ); // Show/hide tags list on single post $wp_customize->add_setting( 'pridmag_tags_list', array( 'default' => true, 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_checkbox' ) ); $wp_customize->add_control( 'pridmag_tags_list', array( 'settings' => 'pridmag_tags_list', 'section' => 'pridmag_singlepost_section', 'type' => 'checkbox', 'label' => esc_html__( 'Display tags list.', 'pridmag' ), ) ); // Footer copyright text $wp_customize->add_setting( 'pridmag_footer_copyright_text', array( 'default' => '', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'sanitize_text_field' ) ); $wp_customize->add_control( 'pridmag_footer_copyright_text', array( 'settings' => 'pridmag_footer_copyright_text', 'section' => 'pridmag_footer_section', 'type' => 'textarea', 'label' => esc_html__( 'Footer Copyright Text', 'pridmag' ) ) ); /* Add primary color setting */ $wp_customize->add_setting( 'pridmag_primary_color', array( 'default' => '#3498db', 'type' => 'theme_mod', 'capability' => 'edit_theme_options', 'sanitize_callback' => 'pridmag_sanitize_hex_color' ) ); $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'pridmag_primary_color', array( 'settings' => 'pridmag_primary_color', 'section' => 'colors', 'label' => esc_html__( 'Theme Primary Color', 'pridmag' ), ) ) ); // Theme Documentation. $wp_customize->add_setting( 'pridmag_documentation', array( 'default' => '', 'transport' => 'refresh', 'sanitize_callback' => 'esc_attr' ) ); $wp_customize->add_control( new PridMag_Info_Control( $wp_customize, 'pridmag_documentation', array( 'label' => esc_html__( 'Theme documentation', 'pridmag' ), 'description' => __( 'Read the documentation.', 'pridmag' ), 'section' => 'pridmag_themeinfo_section' ) ) ); // Theme Demo. $wp_customize->add_setting( 'pridmag_demo', array( 'default' => '', 'transport' => 'refresh', 'sanitize_callback' => 'esc_attr' ) ); $wp_customize->add_control( new PridMag_Info_Control( $wp_customize, 'pridmag_demo', array( 'label' => esc_html__( 'Theme demo', 'pridmag' ), 'description' => __( 'View Demo.', 'pridmag' ), 'section' => 'pridmag_themeinfo_section' ) ) ); } add_action( 'customize_register', 'pridmag_customize_register' ); /** * Render the site title for the selective refresh partial. * * @return void */ function pridmag_customize_partial_blogname() { bloginfo( 'name' ); } /** * Render the site tagline for the selective refresh partial. * * @return void */ function pridmag_customize_partial_blogdescription() { bloginfo( 'description' ); } /** * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. */ function pridmag_customize_preview_js() { wp_enqueue_script( 'pridmag-customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20151215', true ); } add_action( 'customize_preview_init', 'pridmag_customize_preview_js' ); /** * Enqueue the customizer stylesheet. */ function pridmag_enqueue_customizer_stylesheets() { wp_register_style( 'pridmag-customizer-css', get_template_directory_uri() . '/inc/customizer/assets/customizer.css', NULL, NULL, 'all' ); wp_enqueue_style( 'pridmag-customizer-css' ); } add_action( 'customize_controls_print_styles', 'pridmag_enqueue_customizer_stylesheets' ); /** * Checkbox sanitization. * * @param bool $checked Whether the checkbox is checked. * @return bool Whether the checkbox is checked. */ function pridmag_sanitize_checkbox( $checked ) { // Boolean check. return ( ( isset( $checked ) && true == $checked ) ? true : false ); } /** * Select sanitization * * @see sanitize_key() https://developer.wordpress.org/reference/functions/sanitize_key/ * @see $wp_customize->get_control() https://developer.wordpress.org/reference/classes/wp_customize_manager/get_control/ * * @param string $input Slug to sanitize. * @param WP_Customize_Setting $setting Setting instance. * @return string Sanitized slug if it is a valid choice; otherwise, the setting default. */ function pridmag_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 ); } /** * Color sanitization */ function pridmag_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 ); } /** * Number sanitization. * * @see absint() https://developer.wordpress.org/reference/functions/absint/ * * @param int $number Number to sanitize. * @param WP_Customize_Setting $setting Setting instance. * @return int Sanitized number; otherwise, the setting default. */ function pridmag_sanitize_number_absint( $number, $setting ) { // Ensure $number is an absolute integer (whole number, zero or greater). $number = absint( $number ); // If the input is an absolute integer, return it; otherwise, return the default return ( $number ? $number : $setting->default ); }