When restoring sidebars after switching back to an old theme, make sure the saved data matches the theme's current sidebars, fixes #19092

git-svn-id: https://develop.svn.wordpress.org/trunk@19332 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Ozz 2011-11-18 06:00:29 +00:00
parent fd354a3d35
commit c2a18ab5fd
1 changed files with 9 additions and 3 deletions

View File

@ -1164,17 +1164,23 @@ function _wp_sidebars_changed() {
function retrieve_widgets() {
global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets;
$_sidebars_widgets = array();
$sidebars = array_keys($wp_registered_sidebars);
$old_sidebars_widgets = get_theme_mod( 'sidebars_widgets' );
if ( is_array( $old_sidebars_widgets ) ) {
// time() that sidebars were stored is in $old_sidebars_widgets['time']
$_sidebars_widgets = $old_sidebars_widgets['data'];
$old_sidebars = $old_sidebars_widgets['data'];
// make sure the saved sidebars match
foreach ( $sidebars as $sidebar_id ) {
$_sidebars_widgets[$sidebar_id] = isset($old_sidebars[$sidebar_id]) ? $old_sidebars[$sidebar_id] : array();
}
remove_theme_mod( 'sidebars_widgets' );
} else {
if ( empty( $sidebars_widgets ) )
return;
$sidebars = array_keys($wp_registered_sidebars);
unset( $sidebars_widgets['array_version'] );
$old = array_keys($sidebars_widgets);