#37661 closed feature request (fixed)
A New Experience for Discovering, Installing, and Previewing Themes in the Customizer
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Milestone: | 4.9 | Priority: | high |
| Severity: | normal | Version: | 4.2 |
| Component: | Customize | Keywords: | has-screenshots has-user-testing has-patch needs-testing ux-feedback commit |
| Focuses: | ui, accessibility, javascript | Cc: |
Description
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 withremove_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.
Attachments (39)
Change History (282)
#2
@
9 years ago
- Keywords needs-testing added
- Milestone changed from Future Release to 4.7
- Priority changed from normal to high
Along with #34923 and (potentially) #35395, this is a high-priority customize component ticket for 4.7, under the theme of eliminating usability dead ends. We'll likely start holding some regular meetings to work on these and other customize tickets and projects.
In the meantime, feedback and testing is needed. There remain a few tasks to do, listed above, as well. While accessibility is considered in the UI that this adapts, it will probably need some work, particularly around the more dynamic elements here.
This ticket was mentioned in βSlack in #themereview by kenshino. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #design by celloexpressions. βView the logs.
9 years ago
#6
@
9 years ago
Just adding note that it would be great to see added to the task list user testing, this is something absolutely should have that as a phase along with design feedback.
I'm also going to request this gets discussion as part of this week's design meeting. It's a good time to get input and feedback.
My own thoughts are I do find it a little disjointed as an experience. I think the page design wise needs a lot of work. This may be because I'm trained to expect a format. It also may be the transitions. I'd be interested to see if the UX improvements you are suggesting smooth this out. I'd be very interested in user feedback on this through testing.
#7
@
9 years ago
Of course - user testing and and design iterations will absolutely be necessary here. I should have clarified that the list above is base functionality that still needs to be developed, but I wanted to get the rest out there in the meantime so that we can start iterating on the design and UX. Any feedback and discussion during the design meeting would be fantastic as a first step. I'm adding a couple more visuals including a still of the main panel view to help document the current state of the patch.
I'll also note that most of the UI currently in the patch is derived from the themes pages in the admin. I think we should be willing to diverge from that UI here as we work to optimize the experience, and improvements to the admin page could be synced back in the future.
@
9 years ago
Still view of the installed themes section, to facilitate more refined UI discussions.
This ticket was mentioned in βSlack in #design by hugobaeta. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #themereview by celloexpressions. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #core by celloexpressions. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #core-customize by celloexpressions. βView the logs.
9 years ago
#14
@
9 years ago
- Owner set to celloexpressions
- Status changed from new to assigned
Still looking for volunteers to iterate on the design and coordinate user testing. Let me know if you're interested. We'll have weekly discussions on this project during the customize component meetings Mondays at 17:00 UTC, see βhttps://make.wordpress.org/core/2016/08/25/customize-kickoff-and-weekly-meetings-for-4-7/.
This ticket was mentioned in βSlack in #core by celloexpressions. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #meta by celloexpressions. βView the logs.
9 years ago
@
9 years ago
Add theme updating and deletion, improve view when users can't install themes, clean up theme details events.
#17
@
9 years ago
- Keywords needs-user-testing added
37661.1.diffβ adds:
- Refine UI for users that can't install themes (and multisite), and restore the existing installed themes filter for these users. We need to figure out how to maintain the grid of themes when some of them are hidden (the nth-child approach for margins breaks when elements are hidden).
- Clean up JS events for theme details buttons.
- Delete themes (shiny), which also updates instances of the theme in other sections accordingly.
- Update themes (shiny). We're now patching updates.js as well so we definitely can't use a plugin for testing unfortunately. We also need to define the JS
pagenowglobal in the customizer now for updates and deletion to work properly. I unfortunately can't test whether the UI is updated appropriately on a successful update, as my internet connection is currently too slow for my local server to download a theme from .org, but update failures are working well.
I also investigated adding theme reviews to the details modal. Per the above discussion in #meta, the themes api doesn't have a way to query theme reviews yet. This may be possible now that the forums have been updated from bbPress 1.x, but we'll explore further in a separate ticket in a future release, and coordinate was needed with the meta team for API support.
That leaves only on more major development task:
- "Shiny" theme upload ajax action, add new theme control to installed section, focus() control.
With nearly all of the functionality complete, now is the time for testing to pick up. @karmatosed will be coordinating user tests soon, and anyone who knows how to install a patch is highly encouraged to test the patch and comment here with feedback. Once we go through a round of user testing and design adjustments (I believe @folletto has some suggestions?), we can do a make/core post for additional feedback.
#18
@
9 years ago
@celloexpressions I looked at the patch today and I think before we user test we probably want to tidy up some of the big UI issues. I'm a little concerned at this point that users would get caught up on some of the things over give us experience feedback.
Small things like padding and format I think if fixed will at least give the feature a chance.
I also discovered hitches like this, which if not fixed would just confuse in a user test:
The more I explored this, the more I'm thinking something isn't working in the patch or my setup. Perhaps we can start with working out if that is the case?
#19
@
9 years ago
@karmatosed yeah looks like you're not getting the CSS (and/or maybe JS) changes in the patch - it shouldn't look anything like that :) It should be similar to all of the screenshots I posted.
You could try a hard refresh in your browser, and make sure you're seeing a modified version of customize-controls.css and customize-controls.js in the browser inspector after applying the patch. You could also search for #customize-theme-section-navigation in both files - if that's not there then it's still the old version. And also make sure SCRIPT_DEBUG is on, etc.
There's also a possibility that something's wrong with the patch - can anyone else test to confirm?
This ticket was mentioned in βSlack in #core-customize by celloexpressions. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #accessibility by afercia. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #themereview by greenshady. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #core by celloexpressions. βView the logs.
9 years ago
#24
@
9 years ago
I ran an informal in-person user test today. The user recently moved her personal site to WordPress and also uses WordPress in a role overseeing contributors and publishing some content herself at βhttp://annenbergdl.org/. Her background is in communication and design. Her feedback was:
- The way it works with unsaved changes is confusing. The notice at the top of the themes page isn't obvious, you want to scroll down and browse through the themes.
- Maybe putting a notice under the change button [on the top level of the customizer] would help make it more obvious [we could do this only if it's a theme preview, not the active theme].
- "Why would you install a theme without previewing it?"
- "I would never use the favorites feature."
- "Every time I look at the featured themes, there are no themes I'd want to use. It might be better if they were more curated or something."
Aside: I also had her play with #34923 and she liked it, only concern was regarding editing posts after they're created.
On the subject of favorites, in my testing I found very few users that I tried had any favorites set (including myself). I primarily checked members of the theme review team and core contributors, but I wonder if we can get some stats from .org on how many users have favorite themes.
This ticket was mentioned in βSlack in #themereview by rabmalin. βView the logs.
9 years ago
This ticket was mentioned in βSlack in #themereview by omo. βView the logs.
9 years ago
#27
@
9 years ago
Tested a bit, haven't looked in depth at the code though. Here's some notes, I'm pretty sure many of these things are already known :)
- initial focus: seems it doesn't work the second time the panel opens, to reproduce: use the keyboard, press "Change", the panel slides in, initial focus is on the "Customize" button, press Enter, panel slides out, press again Enter on the "Change" button
- it's not so clear the button "Customize" actually means "Go back"
- consider to add a "Go back" button at the end of the themes list
- clicking on the search field makes all themes disappear (see following issue): I guess this is intentional but doesn't feel right to me
- search doesn't work consistently when using only the keyboard, works correctly only when first clicking on the search field
- not sure about how search is debounced (I may be wrong)
- debounce delay should be 500 to be consistent with other similar search implementations
- search field events should be standardised to
inputandkeyup, see for example https://core.trac.wordpress.org/ticket/37233#comment:21 - the search placeholder has a space before the hellip, see also the hidden label
- consider to announce the search results (also when there are no results) via
wp.a11y.speak() - consider to announce errors via
wp.a11y.speak() - go to the "Popular" tab and ensure it is showing some of your installed themes: clicking on an *installed* theme details gives error
Cannot read property 'delete' of undefined - browsing themes details doesn't show *installed themes* and gives error
Cannot read property 'delete' of undefined - in any section: press Escape > all themes disappear: would be more consistent to use Escape to go back
- open any theme details > press Escape > all themes disappear
- consider to move the Help at the beginning
- the help button "circular focus" is a bit bigger than usual
- keyboard navigation should be constrained within the full overlay
- the responsive view needs some love: see the theme name when too long, help button hidden by help panel, see screenshot below
- please don't hate me :)
#28
@
9 years ago
Thanks for the detailed feedback @afercia!
- There are two customize buttons after the featured section has loaded, and the one in the current theme control is focused when re-opening. We need to update the selector for the initial focus in the panel to be unique to the top button.
- Does anyone else have feedback on "Customize" meaning to go back to customizing the current theme?
- Good idea. Maybe a link at the bottom of the panel, floated right, with the text "Back to customize"? This will also show up when there are no themes or themes are loading.
- Maybe we should remove the click handler for expanding the search section?
- The search handler needs to ensure the search section is expanded on keyup, which would also make 4. work.
- Search is debounced to 800 ms. We could bring it down to 500 to match elsewhere. It's so high because we start loading up to 100 themes as soon as it's called, so I want to make sure we minimize extra hits there.
- See 6.
- With #38021, we should be able to standardize to only using
inputhere. - Quick fix.
- Good idea.
- Good idea.
<# if ( data.actions['delete'] ) { #>should check fordata.actionsfirst intmpl-customize-themes-details-view.- Fixed by 12.
- Escape is collapsing the section; we should have it collapse the panel directly.
- Escape is collapsing the section; if details are open it should collapse the details modal instead.
- Easy fix.
- It's because there's a larger tap target here. We could move the focus to
:beforeand make it smaller but wouldn't this also make it easier to see? Or is consistency better? - For some reason this isn't happening within the custom panel. We'll need to migrate the logic from other sections and panels over.
- This is inherited from theme-install.php and, yes, could use some work. Does anyone have design ideas for the filter bar on mobile other than continuing the floated links approach?
- Quite the contrary :)
I can make those changes later this week unless anyone else is interested in tackling some of them sooner. Also need some design decisions as noted in the list above.
This ticket was mentioned in βSlack in #core-customize by celloexpressions. βView the logs.
9 years ago
#30
@
9 years ago
Noting that it seems necessary to hard-refresh the browser (typically something like Ctrl-F5) whenever these patches are applied or reverted for whatever reason. If something looks broken, please hard-refresh and it should be resolved.



Scroll down for screenshots, etc. For historical purposes, and to aid future PM work, here is my working to-do list for tasks completed so far:
This represents about 60 hours of development time, in addition to the prior UX design work. Remaining tasks: