Opened 21 months ago
Last modified 2 months ago
#18588 new enhancement
Auto-select "Primary Menu " when switching themes
| Reported by: |
|
Owned by: | |
|---|---|---|---|
| Priority: | normal | Milestone: | Future Release |
| Component: | Menus | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | aaroncampbell, hanni, unsalkorkmaz@…, leho@… |
Description
Now that we have auto-matching of sidebars when switching themes, it's time to do the same for at least the Primary Menu. This would improve the UX quite a bit.
While testing the widgets/sidebars had to switch themes many times and since my test install has few hundred pages, each time I've ended up with a huge menu on the front end. That of course looks completely broken.
Further to keeping the setting for Primary Menu on theme switching IMHO we should auto-set it as soon as a menu is created. This would fix the most unfriendly experience with the menus screen.
Change History (7)
comment:1
aaroncampbell — 21 months ago
- Cc aaroncampbell added
- Milestone changed from 3.3 to Future Release
Yes, it can use the same method as the sidebars transfer from the old theme to the new.
comment:5
unsalkorkmaz — 10 months ago
- Cc unsalkorkmaz@… added
comment:6
unsalkorkmaz — 10 months ago
This is not a full solution for this problem but if you looking for a temporary solution for similar theme switches that have same theme locations (child themes etc):
/*
This action copies old theme's theme location saves to
new theme if new theme doesnt have saves before.
*/
add_action( 'after_switch_theme', 'ajx_theme_locations_rescue' );
function ajx_theme_locations_rescue() {
// bug report / support: http://www.unsalkorkmaz.com/
// We got old theme's slug name
$old_theme = get_option( 'theme_switched' );
// Getting old theme's settings
$old_theme_mods = get_option("theme_mods_{$old_theme}");
// Getting old theme's theme location settings
$old_theme_navs = $old_theme_mods['nav_menu_locations'];
// Getting new theme's theme location settings
$new_theme_navs = get_theme_mod( 'nav_menu_locations' );
// If new theme's theme location is empty (its not empty if theme was activated and set some theme locations before)
if (!$new_theme_navs) {
// Getting registered theme locations on new theme
$new_theme_locations = get_registered_nav_menus();
foreach ($new_theme_locations as $location => $description ) {
// We setting same nav menus for each theme location
$new_theme_navs[$location] = $old_theme_navs[$location];
}
set_theme_mod( 'nav_menu_locations', $new_theme_navs );
}
}

I'm in. Looking like this will need to be 3.4, though, since there's no patch and today is freeze?