Make WordPress Core

Opened 3 years ago

Last modified 13 months ago

#18588 new enhancement

Auto-select "Primary Menu " when switching themes

Reported by: azaozz Owned by:
Milestone: Future Release Priority: normal
Severity: normal Version:
Component: Menus Keywords:
Focuses: Cc:


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 aaroncampbell3 years ago

  • Cc aaroncampbell added

comment:2 hanni3 years ago

  • Cc hanni added

comment:3 jane3 years ago

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

comment:4 azaozz3 years ago

  • 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 unsalkorkmaz21 months ago

  • Cc unsalkorkmaz@… added

comment:6 unsalkorkmaz21 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 );

comment:7 lkraav13 months ago

  • Cc leho@… added
Note: See TracTickets for help on using tickets.