Make WordPress Core


Ignore:
Timestamp:
10/27/2016 10:08:33 PM (8 years ago)
Author:
davidakennedy
Message:

Twenty Seventeen: Improve user and developer experience with the customizer integration

  • Rename customizer JS files to customize-preview.js and customize-controls.js to align with the core file naming and make it clearer where each file runs.
  • Only show the colorscheme_hue control when there's a custom color scheme.
  • Update preview JS handling for revised front page section handling, see below.
  • Remove all references to "Theme Customizer" in code comments. It hasn't been called that since before 4.0.
  • Clarify the purpose of the JS files by updated the code comments in the file headers.
  • Improve code readability.
  • Make the arbitrary number of front page sections filterable, for UI registration and output.
  • Rename twentyseventeen_sanitize_layout to twentyseventeen_sanitize_page_layout to be clearer about what it sanitizes in case child themes or plugins consider reusing it.
  • Rename page_options setting/control to page_layout as that's more reflective of what that option does; and again, helps for potential extensions.
  • Make the page layout option contextual to pages and the sidebar being inactive, as the option only applies when there is no sidebar (per its description).
  • Condense options into a single section.
  • Add selective refresh for front page sections.
  • Locate active_callback functions within customizer.php so that they're easier to find when editing customizer registrations, similarly to sanitize callbacks.
  • Adjust the styling for placeholders for panels that aren't active.
  • Ensure that the new visible edit shortcuts don't have any issues.

Props celloexpressions.

Fixes #38426.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-content/themes/twentyseventeen/inc/customizer.php

    r38985 r38986  
    11<?php
    22/**
    3  * Twenty Seventeen: Theme Customizer
     3 * Twenty Seventeen: Customizer
    44 *
    55 * @package WordPress
     
    6363
    6464    /**
    65      * Add the Theme Options section.
     65     * Theme options.
    6666     */
    67     $wp_customize->add_panel( 'options_panel', array(
    68         'title'       => __( 'Theme Options', 'twentyseventeen' ),
    69         'description' => __( 'Configure your theme settings', 'twentyseventeen' ),
    70     ) );
    71 
    72     // Page Options.
    73     $wp_customize->add_section( 'page_options', array(
    74         'title'           => __( 'Single Page Layout', 'twentyseventeen' ),
    75         'active_callback' => 'twentyseventeen_is_page',
    76         'panel'           => 'options_panel',
    77     ) );
    78 
    79     $wp_customize->add_setting( 'page_options', array(
     67    $wp_customize->add_section( 'theme_options', array(
     68        'title'    => __( 'Theme Options', 'twentyseventeen' ),
     69        'priority' => 130, // Before Additional CSS.
     70    ) );
     71
     72    $wp_customize->add_setting( 'page_layout', array(
    8073        'default'           => 'two-column',
    81         'sanitize_callback' => 'twentyseventeen_sanitize_layout',
     74        'sanitize_callback' => 'twentyseventeen_sanitize_page_layout',
    8275        'transport'         => 'postMessage',
    8376    ) );
    8477
    85     $wp_customize->add_control( 'page_options', array(
     78    $wp_customize->add_control( 'page_layout', array(
    8679        'label'       => __( 'Page Layout', 'twentyseventeen' ),
    87         'section'     => 'page_options',
     80        'section'     => 'theme_options',
    8881        'type'        => 'radio',
    8982        'description' => __( 'When no sidebar widgets are assigned, you can opt to display all pages with a one column or two column layout. When the two column layout is assigned, the page title is in one column and content is in the other.', 'twentyseventeen' ),
     
    9285            'two-column' => __( 'Two Column', 'twentyseventeen' ),
    9386        ),
    94     ) );
    95 
    96     // Panel 1.
    97     $wp_customize->add_section( 'panel_1', array(
    98         'title'           => __( 'Panel 1', 'twentyseventeen' ),
    99         'active_callback' => 'is_front_page',
    100         'panel'           => 'options_panel',
    101         'description'     => __( 'Add an image to your panel by setting a featured image in the page editor. If you don&rsquo;t select a page, this panel will not be displayed.', 'twentyseventeen' ),
    102     ) );
    103 
    104     $wp_customize->add_setting( 'panel_1', array(
    105         'default'           => false,
    106         'sanitize_callback' => 'absint',
    107     ) );
    108 
    109     $wp_customize->add_control( 'panel_1', array(
    110         'label'   => __( 'Panel Content', 'twentyseventeen' ),
    111         'section' => 'panel_1',
    112         'type'    => 'dropdown-pages',
    113     ) );
    114 
    115     // Panel 2.
    116     $wp_customize->add_section( 'panel_2', array(
    117         'title'           => __( 'Panel 2', 'twentyseventeen' ),
    118         'active_callback' => 'is_front_page',
    119         'panel'           => 'options_panel',
    120         'description'     => __( 'Add an image to your panel by setting a featured image in the page editor. If you don&rsquo;t select a page, this panel will not be displayed.', 'twentyseventeen' ),
    121     ) );
    122 
    123     $wp_customize->add_setting( 'panel_2', array(
    124         'default'           => false,
    125         'sanitize_callback' => 'absint',
    126     ) );
    127 
    128     $wp_customize->add_control( 'panel_2', array(
    129         'label'   => __( 'Panel Content', 'twentyseventeen' ),
    130         'section' => 'panel_2',
    131         'type'    => 'dropdown-pages',
    132     ) );
    133 
    134     // Panel 3.
    135     $wp_customize->add_section( 'panel_3', array(
    136         'title'           => __( 'Panel 3', 'twentyseventeen' ),
    137         'active_callback' => 'is_front_page',
    138         'panel'           => 'options_panel',
    139         'description'     => __( 'Add an image to your panel by setting a featured image in the page editor. If you don&rsquo;t select a page, this panel will not be displayed.', 'twentyseventeen' ),
    140     ) );
    141 
    142     $wp_customize->add_setting( 'panel_3', array(
    143         'default'           => false,
    144         'sanitize_callback' => 'absint',
    145     ) );
    146 
    147     $wp_customize->add_control( 'panel_3', array(
    148         'label'   => __( 'Panel Content', 'twentyseventeen' ),
    149         'section' => 'panel_3',
    150         'type'    => 'dropdown-pages',
    151     ) );
    152 
    153     // Panel 4.
    154     $wp_customize->add_section( 'panel_4', array(
    155         'title'           => __( 'Panel 4', 'twentyseventeen' ),
    156         'active_callback' => 'is_front_page',
    157         'panel'           => 'options_panel',
    158         'description'     => __( 'Add an image to your panel by setting a featured image in the page editor. If you don&rsquo;t select a page, this panel will not be displayed.', 'twentyseventeen' ),
    159     ) );
    160 
    161     $wp_customize->add_setting( 'panel_4', array(
    162         'default'           => false,
    163         'sanitize_callback' => 'absint',
    164     ) );
    165 
    166     $wp_customize->add_control( 'panel_4', array(
    167         'label'   => __( 'Panel Content', 'twentyseventeen' ),
    168         'section' => 'panel_4',
    169         'type'    => 'dropdown-pages',
    170     ) );
     87        'active_callback' => 'twentyseventeen_is_page_without_sidebar',
     88    ) );
     89
     90    /**
     91     * Filter number of front page sections in Twenty Seventeen.
     92     *
     93     * @since Twenty Seventeen 1.0
     94     *
     95     * @param $num_sections integer
     96     */
     97    $num_sections = apply_filters( 'twentyseventeen_front_page_sections', 4 );
     98
     99    // Create a setting and control for each of the sections available in the theme.
     100    for ( $i = 1; $i < ( 1 + $num_sections ); $i++ ) {
     101        $wp_customize->add_setting( 'panel_' . $i, array(
     102            'default'           => false,
     103            'sanitize_callback' => 'absint',
     104            'transport'         => 'postMessage',
     105        ) );
     106
     107        $wp_customize->add_control( 'panel_' . $i, array(
     108            /* translators: %d is the front page section number */
     109            'label'          => sprintf( __( 'Front Page Section %d Content', 'twentyseventeen' ), $i ),
     110            'description'    => ( 1 !== $i ? '' : __( 'Select pages to feature in each area from the dropdowns. Add an image to a section by setting a featured image in the page editor. Empty sections will not be displayed.', 'twentyseventeen' ) ),
     111            'section'        => 'theme_options',
     112            'type'           => 'dropdown-pages',
     113            'allow_addition' => true,
     114            'active_callback' => 'twentyseventeen_is_static_front_page',
     115        ) );
     116
     117        $wp_customize->selective_refresh->add_partial( 'panel_' . $i, array(
     118            'selector'            => '#panel' . $i,
     119            'render_callback'     => 'twentyseventeen_front_page_section',
     120            'container_inclusive' => true,
     121        ) );
     122    }
    171123}
    172124add_action( 'customize_register', 'twentyseventeen_customize_register' );
    173125
    174126/**
    175  * Sanitize a radio button.
    176  */
    177 function twentyseventeen_sanitize_layout( $input ) {
     127 * Sanitize the page layout options.
     128 */
     129function twentyseventeen_sanitize_page_layout( $input ) {
    178130    $valid = array(
    179131        'one-column' => __( 'One Column', 'twentyseventeen' ),
     
    226178
    227179/**
    228  * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
     180 * Return whether we're previewing the front page and it's a static page.
     181 */
     182function twentyseventeen_is_static_front_page() {
     183    return ( is_front_page() && ! is_home() );
     184}
     185
     186/**
     187 * Return whether we're previewing a page and there are no widgets in the sidebar.
     188 */
     189function twentyseventeen_is_page_without_sidebar() {
     190    return ( is_page() && ! is_active_sidebar( 'sidebar-1' ) );
     191}
     192
     193/**
     194 * Bind JS handlers to instantly live-preview changes.
    229195 */
    230196function twentyseventeen_customize_preview_js() {
    231     wp_enqueue_script( 'twentyseventeen-customizer', get_theme_file_uri( '/assets/js/customizer.js' ), array( 'customize-preview' ), '1.0', true );
     197    wp_enqueue_script( 'twentyseventeen-customize-preview', get_theme_file_uri( '/assets/js/customize-preview.js' ), array( 'customize-preview' ), '1.0', true );
    232198}
    233199add_action( 'customize_preview_init', 'twentyseventeen_customize_preview_js' );
    234200
    235201/**
    236  * Some extra JavaScript to improve the user experience in the Customizer for this theme.
     202 * Load dynamic logic for the customizer controls area.
    237203 */
    238204function twentyseventeen_panels_js() {
    239     wp_enqueue_script( 'twentyseventeen-panel-customizer', get_theme_file_uri( '/assets/js/panel-customizer.js' ), array(), '1.0', true );
     205    wp_enqueue_script( 'twentyseventeen-customize-controls', get_theme_file_uri( '/assets/js/customize-controls.js' ), array(), '1.0', true );
    240206}
    241207add_action( 'customize_controls_enqueue_scripts', 'twentyseventeen_panels_js' );
Note: See TracChangeset for help on using the changeset viewer.