[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-content/themes/twentyseventeen/inc/ -> customizer.php (source)

   1  <?php
   2  /**
   3   * Twenty Seventeen: Customizer
   4   *
   5   * @package WordPress
   6   * @subpackage Twenty_Seventeen
   7   * @since Twenty Seventeen 1.0
   8   */
   9  
  10  /**
  11   * Add postMessage support for site title and description for the Theme Customizer.
  12   *
  13   * @param WP_Customize_Manager $wp_customize Theme Customizer object.
  14   */
  15  function twentyseventeen_customize_register( $wp_customize ) {
  16      $wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
  17      $wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';
  18      $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';
  19  
  20      $wp_customize->selective_refresh->add_partial(
  21          'blogname',
  22          array(
  23              'selector'        => '.site-title a',
  24              'render_callback' => 'twentyseventeen_customize_partial_blogname',
  25          )
  26      );
  27      $wp_customize->selective_refresh->add_partial(
  28          'blogdescription',
  29          array(
  30              'selector'        => '.site-description',
  31              'render_callback' => 'twentyseventeen_customize_partial_blogdescription',
  32          )
  33      );
  34  
  35      /**
  36       * Custom colors.
  37       */
  38      $wp_customize->add_setting(
  39          'colorscheme',
  40          array(
  41              'default'           => 'light',
  42              'transport'         => 'postMessage',
  43              'sanitize_callback' => 'twentyseventeen_sanitize_colorscheme',
  44          )
  45      );
  46  
  47      $wp_customize->add_setting(
  48          'colorscheme_hue',
  49          array(
  50              'default'           => 250,
  51              'transport'         => 'postMessage',
  52              'sanitize_callback' => 'absint', // The hue is stored as a positive integer.
  53          )
  54      );
  55  
  56      $wp_customize->add_control(
  57          'colorscheme',
  58          array(
  59              'type'     => 'radio',
  60              'label'    => __( 'Color Scheme', 'twentyseventeen' ),
  61              'choices'  => array(
  62                  'light'  => __( 'Light', 'twentyseventeen' ),
  63                  'dark'   => __( 'Dark', 'twentyseventeen' ),
  64                  'custom' => __( 'Custom', 'twentyseventeen' ),
  65              ),
  66              'section'  => 'colors',
  67              'priority' => 5,
  68          )
  69      );
  70  
  71      $wp_customize->add_control(
  72          new WP_Customize_Color_Control(
  73              $wp_customize,
  74              'colorscheme_hue',
  75              array(
  76                  'mode'     => 'hue',
  77                  'section'  => 'colors',
  78                  'priority' => 6,
  79              )
  80          )
  81      );
  82  
  83      /**
  84       * Theme options.
  85       */
  86      $wp_customize->add_section(
  87          'theme_options',
  88          array(
  89              'title'    => __( 'Theme Options', 'twentyseventeen' ),
  90              'priority' => 130, // Before Additional CSS.
  91          )
  92      );
  93  
  94      $wp_customize->add_setting(
  95          'page_layout',
  96          array(
  97              'default'           => 'two-column',
  98              'sanitize_callback' => 'twentyseventeen_sanitize_page_layout',
  99              'transport'         => 'postMessage',
 100          )
 101      );
 102  
 103      $wp_customize->add_control(
 104          'page_layout',
 105          array(
 106              'label'           => __( 'Page Layout', 'twentyseventeen' ),
 107              'section'         => 'theme_options',
 108              'type'            => 'radio',
 109              'description'     => __( 'When the two-column layout is assigned, the page title is in one column and content is in the other.', 'twentyseventeen' ),
 110              'choices'         => array(
 111                  'one-column' => __( 'One Column', 'twentyseventeen' ),
 112                  'two-column' => __( 'Two Column', 'twentyseventeen' ),
 113              ),
 114              'active_callback' => 'twentyseventeen_is_view_with_layout_option',
 115          )
 116      );
 117  
 118      /**
 119       * Filters the number of front page sections in Twenty Seventeen.
 120       *
 121       * @since Twenty Seventeen 1.0
 122       *
 123       * @param int $num_sections Number of front page sections.
 124       */
 125      $num_sections = apply_filters( 'twentyseventeen_front_page_sections', 4 );
 126  
 127      // Create a setting and control for each of the sections available in the theme.
 128      for ( $i = 1; $i < ( 1 + $num_sections ); $i++ ) {
 129          $wp_customize->add_setting(
 130              'panel_' . $i,
 131              array(
 132                  'default'           => false,
 133                  'sanitize_callback' => 'absint',
 134                  'transport'         => 'postMessage',
 135              )
 136          );
 137  
 138          $wp_customize->add_control(
 139              'panel_' . $i,
 140              array(
 141                  /* translators: %d: The front page section number. */
 142                  'label'           => sprintf( __( 'Front Page Section %d Content', 'twentyseventeen' ), $i ),
 143                  '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' ) ),
 144                  'section'         => 'theme_options',
 145                  'type'            => 'dropdown-pages',
 146                  'allow_addition'  => true,
 147                  'active_callback' => 'twentyseventeen_is_static_front_page',
 148              )
 149          );
 150  
 151          $wp_customize->selective_refresh->add_partial(
 152              'panel_' . $i,
 153              array(
 154                  'selector'            => '#panel' . $i,
 155                  'render_callback'     => 'twentyseventeen_front_page_section',
 156                  'container_inclusive' => true,
 157              )
 158          );
 159      }
 160  }
 161  add_action( 'customize_register', 'twentyseventeen_customize_register' );
 162  
 163  /**
 164   * Sanitize the page layout options.
 165   *
 166   * @param string $input Page layout.
 167   */
 168  function twentyseventeen_sanitize_page_layout( $input ) {
 169      $valid = array(
 170          'one-column' => __( 'One Column', 'twentyseventeen' ),
 171          'two-column' => __( 'Two Column', 'twentyseventeen' ),
 172      );
 173  
 174      if ( array_key_exists( $input, $valid ) ) {
 175          return $input;
 176      }
 177  
 178      return '';
 179  }
 180  
 181  /**
 182   * Sanitize the colorscheme.
 183   *
 184   * @param string $input Color scheme.
 185   */
 186  function twentyseventeen_sanitize_colorscheme( $input ) {
 187      $valid = array( 'light', 'dark', 'custom' );
 188  
 189      if ( in_array( $input, $valid, true ) ) {
 190          return $input;
 191      }
 192  
 193      return 'light';
 194  }
 195  
 196  /**
 197   * Render the site title for the selective refresh partial.
 198   *
 199   * @since Twenty Seventeen 1.0
 200   *
 201   * @see twentyseventeen_customize_register()
 202   *
 203   * @return void
 204   */
 205  function twentyseventeen_customize_partial_blogname() {
 206      bloginfo( 'name' );
 207  }
 208  
 209  /**
 210   * Render the site tagline for the selective refresh partial.
 211   *
 212   * @since Twenty Seventeen 1.0
 213   *
 214   * @see twentyseventeen_customize_register()
 215   *
 216   * @return void
 217   */
 218  function twentyseventeen_customize_partial_blogdescription() {
 219      bloginfo( 'description' );
 220  }
 221  
 222  /**
 223   * Return whether we're previewing the front page and it's a static page.
 224   */
 225  function twentyseventeen_is_static_front_page() {
 226      return ( is_front_page() && ! is_home() );
 227  }
 228  
 229  /**
 230   * Return whether we're on a view that supports a one or two column layout.
 231   */
 232  function twentyseventeen_is_view_with_layout_option() {
 233      // This option is available on all pages. It's also available on archives when there isn't a sidebar.
 234      return ( is_page() || ( is_archive() && ! is_active_sidebar( 'sidebar-1' ) ) );
 235  }
 236  
 237  /**
 238   * Bind JS handlers to instantly live-preview changes.
 239   */
 240  function twentyseventeen_customize_preview_js() {
 241      wp_enqueue_script( 'twentyseventeen-customize-preview', get_theme_file_uri( '/assets/js/customize-preview.js' ), array( 'customize-preview' ), '20161002', true );
 242  }
 243  add_action( 'customize_preview_init', 'twentyseventeen_customize_preview_js' );
 244  
 245  /**
 246   * Load dynamic logic for the customizer controls area.
 247   */
 248  function twentyseventeen_panels_js() {
 249      wp_enqueue_script( 'twentyseventeen-customize-controls', get_theme_file_uri( '/assets/js/customize-controls.js' ), array(), '20161020', true );
 250  }
 251  add_action( 'customize_controls_enqueue_scripts', 'twentyseventeen_panels_js' );


Generated: Tue Mar 19 01:00:02 2024 Cross-referenced by PHPXref 0.7.1