Changeset 18630 for trunk/wp-includes/widgets.php
- Timestamp:
- 09/02/2011 10:13:55 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/widgets.php
r18532 r18630 548 548 'id' => "sidebar-$i", 549 549 'description' => '', 550 'class' => '', 550 551 'before_widget' => '<li id="%1$s" class="widget %2$s">', 551 552 'after_widget' => "</li>\n", … … 1056 1057 1057 1058 case 2 : 1058 $sidebars = array_keys( $wp_registered_sidebars ); 1059 if ( !empty( $sidebars ) ) { 1060 // Move the known-good ones first 1061 foreach ( (array) $sidebars as $id ) { 1062 if ( array_key_exists( $id, $sidebars_widgets ) ) { 1063 $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 1064 unset($sidebars_widgets[$id], $sidebars[$id]); 1065 } 1066 } 1067 1068 // move the rest to wp_inactive_widgets 1069 if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 1070 $_sidebars_widgets['wp_inactive_widgets'] = array(); 1071 1072 if ( !empty($sidebars_widgets) ) { 1073 foreach ( $sidebars_widgets as $lost => $val ) { 1074 if ( is_array($val) ) 1075 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 1076 } 1077 } 1078 1079 $sidebars_widgets = $_sidebars_widgets; 1080 unset($_sidebars_widgets); 1081 } 1059 $sidebars_widgets = retrieve_widgets(); 1082 1060 } 1083 1061 } … … 1216 1194 return preg_replace( '/-[0-9]+$/', '', $id ); 1217 1195 } 1196 1197 function check_theme_switched() { 1198 if ( false !== ( $old_theme = get_option( 'theme_switched' ) ) && !empty( $old_theme ) ) { 1199 global $sidebars_widgets; 1200 1201 if ( ! is_array( $sidebars_widgets ) ) 1202 $sidebars_widgets = wp_get_sidebars_widgets(); 1203 1204 $key = md5( $old_theme ); 1205 // Store widgets for 1 week so we can restore if needed 1206 set_transient( 'old_widgets_' . $key, $sidebars_widgets, 604800 ); 1207 1208 retrieve_widgets(); 1209 update_option( 'theme_switched', false ); 1210 } 1211 } 1212 1213 // look for "lost" widgets, this has to run at least on each theme change 1214 function retrieve_widgets() { 1215 global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets; 1216 1217 $key = md5( get_current_theme() ); 1218 if ( false !== ( $_sidebars_widgets = get_transient( "old_widgets_{$key}" ) ) ) { 1219 delete_transient( "old_widgets_{$key}" ); 1220 } else { 1221 if ( ! is_array( $sidebars_widgets ) ) 1222 $sidebars_widgets = wp_get_sidebars_widgets(); 1223 1224 $sidebars = array_keys($wp_registered_sidebars); 1225 1226 unset( $sidebars_widgets['array_version'] ); 1227 1228 $old = array_keys($sidebars_widgets); 1229 sort($old); 1230 sort($sidebars); 1231 1232 if ( $old == $sidebars ) 1233 return; 1234 1235 $_sidebars_widgets = array( 1236 'wp_inactive_widgets' => $sidebars_widgets['wp_inactive_widgets'] 1237 ); 1238 1239 unset( $sidebars_widgets['wp_inactive_widgets'] ); 1240 1241 foreach ( $wp_registered_sidebars as $id => $settings ) { 1242 if ( ! empty( $sidebars_widgets ) ) 1243 $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 1244 } 1245 1246 if ( !empty($sidebars_widgets) ) { 1247 $orphaned = 0; 1248 1249 foreach ( $sidebars_widgets as $val ) { 1250 if ( is_array($val) && ! empty( $val ) ) 1251 $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; 1252 } 1253 } 1254 } 1255 1256 // discard invalid, theme-specific widgets from sidebars 1257 $shown_widgets = array(); 1258 1259 foreach ( $_sidebars_widgets as $sidebar => $widgets ) { 1260 if ( !is_array($widgets) ) 1261 continue; 1262 1263 $_widgets = array(); 1264 foreach ( $widgets as $widget ) { 1265 if ( isset($wp_registered_widgets[$widget]) ) 1266 $_widgets[] = $widget; 1267 } 1268 1269 $_sidebars_widgets[$sidebar] = $_widgets; 1270 $shown_widgets = array_merge($shown_widgets, $_widgets); 1271 } 1272 1273 $sidebars_widgets = $_sidebars_widgets; 1274 unset($_sidebars_widgets, $_widgets); 1275 1276 // find hidden/lost multi-widget instances 1277 $lost_widgets = array(); 1278 foreach ( $wp_registered_widgets as $key => $val ) { 1279 if ( in_array($key, $shown_widgets, true) ) 1280 continue; 1281 1282 $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key); 1283 1284 if ( 2 > (int) $number ) 1285 continue; 1286 1287 $lost_widgets[] = $key; 1288 } 1289 1290 $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']); 1291 wp_set_sidebars_widgets($sidebars_widgets); 1292 1293 return $sidebars_widgets; 1294 }
Note: See TracChangeset
for help on using the changeset viewer.