Widgets: Improved sidebar mapping on theme switch
Builds on efforts brought forward in #17979. This will send sidebars through three levels of mapping: 1. If both themes have only one sidebar, that gets mapped. 2. If both themes have sidebars with the same slug, they get mapped. 3. Sidebars that (even partially) match slugs from a similar kind of sidebar will get mapped. Finally, if the theme has previously been active and we have a record of its sidebar configuration then, any unmapped sidebar will be restored to its previous state. Props westonruter, obenland, alexvorn2, timmydcrawford. See #39693. Built from https://develop.svn.wordpress.org/trunk@41555 git-svn-id: http://core.svn.wordpress.org/trunk@41388 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -681,13 +681,16 @@ function switch_theme( $stylesheet ) {
|
||||
|
||||
$_sidebars_widgets = null;
|
||||
if ( 'wp_ajax_customize_save' === current_action() ) {
|
||||
$_sidebars_widgets = $wp_customize->post_value( $wp_customize->get_setting( 'old_sidebars_widgets_data' ) );
|
||||
$old_sidebars_widgets_data_setting = $wp_customize->get_setting( 'old_sidebars_widgets_data' );
|
||||
if ( $old_sidebars_widgets_data_setting ) {
|
||||
$_sidebars_widgets = $wp_customize->post_value( $old_sidebars_widgets_data_setting );
|
||||
}
|
||||
} elseif ( is_array( $sidebars_widgets ) ) {
|
||||
$_sidebars_widgets = $sidebars_widgets;
|
||||
}
|
||||
|
||||
if ( is_array( $_sidebars_widgets ) ) {
|
||||
set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $_sidebars_widgets ) );
|
||||
set_theme_mod( 'sidebars_widgets', $_sidebars_widgets );
|
||||
}
|
||||
|
||||
$nav_menu_locations = get_theme_mod( 'nav_menu_locations' );
|
||||
|
||||
Reference in New Issue
Block a user