[wp-trac] [WordPress Trac] #37661: A New Experience for Discovering, Installing, and Previewing Themes in the Customizer

WordPress Trac noreply at wordpress.org
Mon Aug 15 02:35:08 UTC 2016


#37661: A New Experience for Discovering, Installing, and Previewing Themes in the
Customizer
-------------------------------------+-------------------------------------
 Reporter:  celloexpressions         |      Owner:
     Type:  feature request          |     Status:  new
 Priority:  normal                   |  Milestone:  Future Release
Component:  Customize                |    Version:  4.2
 Severity:  normal                   |   Keywords:  has-patch has-
  Focuses:  ui, accessibility,       |  screenshots
  javascript                         |
-------------------------------------+-------------------------------------
 == Background & History ==

 The customizer originated as a tool for previewing and customizing themes
 and as such, was closely integrated into the theme browsing experience in
 the admin (in WordPress 3.4).  Eventually, as the customizer's role grew
 to that of a framework for live-previewing any change to a site, it became
 apparent that it would benefit from a more direct way to switch themes,
 without entering the admin context. The Customizer Theme Switcher plugin
 was created, and after some refinement, merged into WordPress 4.2.
 However, while it initially included external links to install themes in
 the admin, these were eventually removed due to the jarring experience of
 unexpectedly leaving the customizer.

 Currently, there is no indication that additional themes can be installed
 when viewing available themes in the customizer. For new users, it may
 take quite a bit of time to discover the ability to install themes, via
 wp-admin, or they may give up on WordPress before making this discovery.
 This is a usability dead-end where a user's flow is disrupted in the
 process of discovering, installing, previewing, and activating themes,
 both on initial site setup and when considering a redesign.

 When the theme switcher plugin was developed, we made preliminary plans
 for a theme installation interface as a second phase of the project.
 Specifically, it would leave the "preview" context of the customizer, but
 retain the same identity in the user experience and provide cognitive
 hierarchy from the options in the various customizer sections by sliding
 in from the right instead of the left. @folletto helped develop this
 initial concept early last year.

 == Technical Constraints & Requirements ==

 There have been several technical limitations preventing theme
 installation in the customizer from being addressed previously. Most
 notably, such an interface would require "shiny" ajax-based theme
 installation, updates, and deletion, so that the user flow could
 persistently stay in the customizer themes interface rather than jumping
 to separate "installing" views. This is now possible with phase 2 of
 "Shiny Updates" in WordPress 4.6. Additionally, expansions of the
 customizer JavaScript and JS-templated controls APIs to better support
 dynamically-registered controls were needed to support theme installation
 within the customizer framework, and these were added for the customizer
 menus interface introduced in WordPress 4.3. With these technical
 constraints eliminated, theme installation in the customizer can now be
 considered without requiring significant improvements to the underlying
 themes or customizer APIs.

 The way that the customizer currently previews themes requires the
 customizer to be completely reloaded from PHP to preview a different
 theme. Ideally this will eventually change, but due to the complexity of
 redesigning the internals to make use of a theme setting, and eventually
 to adjust which theme's registered sections, settings, and controls to use
 dynamically, changes to these pieces should be explicitly out of scope for
 the user-facing flow project. The biggest usability block that this
 limitation causes is that unsaved changes are lost when the theme is
 switched. This is currently handled by prompting users with an are-you-
 sure notice in the browser before making the switch, but limitations in
 JavaScript require the loading indicator to be hidden after the user
 selects either to stay on the page or to continue to the new theme,
 causing confusion. In a new interface, this could be further mitigated by
 displaying a warning that there are unsaved changes, with an inline button
 to save and publish them, at the top of the interface, so that it is in
 the user's flow before they begin browsing themes. With transactions, a
 save draft option could also become possible in the future, allowing the
 changes to be saved without being published.

 == Previewing Themes ==

 One of the biggest challenges with theme installation in wp-admin, and
 opportunities in the customizer, is previewing themes. Currently, a
 customizer-like frame displays a preview hosted on WordPress.org, with
 limited content. Rather than opening this potentially-disorienting similar
 but different interface, the proposed flow de-emphasizes the distinction
 between installed and available themes. The primary action for available
 themes is now "Install & Preview", which installs the theme and live
 previews it in one step. Users can now see the theme on their site with
 their content and play with its options in the customizer. If they decide
 it's the wrong theme, the themes panel can be quickly reopened and another
 theme selected and previewed with no harm done. A secondary action would
 allow themes to be installed without instantly previewing, so that the
 installed themes tab can become a personal theme library of sorts, where
 users can save themes that they might want to try on their site. Installed
 themes being a tab along with the available theme headings unifies the
 previously-disorienting separation of themes and add-new themes on
 separate screens, with separate search and header (add new/upload theme)
 functionality.

 == Initial Proposal ==

 Based on the preliminary design work done by @folletto as well as the
 goals and proposals presented above, I have put together an initial
 nearly-fully-functional proposal for a new themes interface in the
 customizer. Due to the tight integration with the existing system, with
 the existing theme control and section as well as internal elements in the
 customizer manager and theme details template requiring moderate
 modifications, this needs to be completed as a patch and cannot be
 reasonably converted into a plugin and back. To counteract this challenge,
 I have completed the major structural development process already, so that
 iterations can focus on the UI, UX, accessibility, and smaller details
 that won't impact the base functionality. A list of development tasks
 leading up to this point and remaining tasks is forthcoming.

 The technical implementation continues adapting the concepts present in
 the backbone.js-based themes experience in wp-admin to leverage the
 customizer API. With the themes experience natively built on the
 customizer framework, it should be much easier for developers to improve
 and maintain the core experience in the future as well as extending the
 core experience in a structured way.

 A few notes on the initial proposal, which will be supplemented with
 visuals and a patch below:
         - The themes experience is unchanged on the top level of the
 customizer, but selecting the change theme button now opens a panel that
 fills the entire screen, as the preview is not relevant when considering a
 theme change.
         - The customizer UI identity is preserved by using similar design
 cues, such as the #eee background with white backgrounds indicating
 actionable UI, and the current theme display in the header, which matches
 the display in the customizer pane.
         - Where possible, the UI is identical to that found  in the theme
 installer in wp-admin (which would remain, of course).
         - The theme details view is unified between installed and
 available themes, with clicking on a screenshot opening the details view
 to match the admin UI.
         - Primary buttons are used where clicking them takes you away from
 the current page; secondary buttons are used elsewhere.
         - Installed themes are no longer loaded every time the customizer
 is opened, resulting in potentially significant performance improvements
 by only calling `wp_prepare_themes_for_js()` when needed. This also allows
 themes in the customizer to be fully disabled with `remove_panel( 'themes'
 )`.
         - The loading strategy attempts to balance performance with wait
 time by loading theme data from Ajax in large batches (100 themes)  and
 following up by rendering screenshots as they become visible (as the
 existing interface does).

 Note: this ticket description can be adapted for a make/core post once
 initial feedback is incorporated.

--
Ticket URL: <https://core.trac.wordpress.org/ticket/37661>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list