Skip to content

How to move menu location saves to child themes properly

/* 
 This action copies old theme's menu location saves to 
 new theme if new theme doesnt have saves before. Helpful for child theme switches
*/
add_action( 'after_switch_theme',  'ajx_theme_locations_rescue' );
function ajx_theme_locations_rescue() {
	// bug report / support: http://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 );

	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *