Ticket #9695: 9695-retrieve_widgets.diff
| File 9695-retrieve_widgets.diff, 2.2 KB (added by , 17 years ago) |
|---|
-
wp-admin/widgets.php
40 40 41 41 // look for "lost" widgets, this has to run at least on each theme change 42 42 function retrieve_widgets() { 43 global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets ;43 global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets; 44 44 45 45 $_sidebars_widgets = array(); 46 46 $sidebars = array_keys($wp_registered_sidebars); 47 47 48 unset( $sidebars_widgets['array_version'] ); 49 48 50 $diff = array_diff( array_keys($sidebars_widgets), $sidebars ); 49 51 if ( empty($diff) ) 50 52 return; 51 53 52 unset( $sidebars_widgets['array_version'] );53 54 54 // Move the known-good ones first 55 55 foreach ( $sidebars as $id ) { 56 56 if ( array_key_exists( $id, $sidebars_widgets ) ) { … … 59 59 } 60 60 } 61 61 62 // Assign to each unmatched registered sidebar the first available orphan63 while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) )64 $_sidebars_widgets[ $sidebar ] = $widgets;65 66 62 // if new theme has less sidebars than the old theme 67 63 if ( !empty($sidebars_widgets) ) { 68 64 foreach ( $sidebars_widgets as $lost => $val ) { … … 70 66 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 71 67 } 72 68 } 69 70 // discard invalid, theme-specific widgets from sidebars 71 foreach ( $_sidebars_widgets as $sidebar => $widgets ) { 72 $_widgets = array(); 73 foreach ( $widgets as $widget ) { 74 if ( isset($wp_registered_widgets[$widget]) ) 75 $_widgets[] = $widget; 76 } 77 $_sidebars_widgets[$sidebar] = $_widgets; 78 } 73 79 74 80 $sidebars_widgets = $_sidebars_widgets; 75 unset($_sidebars_widgets );81 unset($_sidebars_widgets, $_widgets); 76 82 77 83 // find hidden/lost multi-widget instances 78 84 $shown_widgets = array(); … … 105 111 } 106 112 107 113 $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']); 108 $sidebars_widgets['array_version'] = 3;109 114 wp_set_sidebars_widgets($sidebars_widgets); 110 115 } 111 116 retrieve_widgets();