Ticket #17979: 17979.diff
| File 17979.diff, 6.9 KB (added by , 15 years ago) |
|---|
-
wp-includes/default-filters.php
215 215 add_action( 'wp_footer', 'wp_print_footer_scripts' ); 216 216 add_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 ); 217 217 add_action( 'template_redirect', 'wp_shortlink_header', 11, 0 ); 218 add_action( 'switch_theme', 'retrieve_widgets' ); 218 219 219 220 if ( isset( $_GET['replytocom'] ) ) 220 221 add_filter( 'pre_option_blog_public', '__return_zero' ); -
wp-includes/theme.php
1246 1246 * @param string $stylesheet Stylesheet name. 1247 1247 */ 1248 1248 function switch_theme($template, $stylesheet) { 1249 global $wp_theme_directories ;1249 global $wp_theme_directories, $sidebars_widgets; 1250 1250 1251 1251 update_option('template', $template); 1252 1252 update_option('stylesheet', $stylesheet); … … 1260 1260 $default_theme_mods = (array) get_option( "mods_$theme" ); 1261 1261 add_option( "theme_mods_$stylesheet", $default_theme_mods ); 1262 1262 } 1263 $sidebars_widgets = wp_get_sidebars_widgets(); 1263 1264 do_action('switch_theme', $theme); 1264 1265 } 1265 1266 -
wp-includes/widgets.php
1055 1055 unset($_sidebars_widgets); 1056 1056 1057 1057 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 } 1058 $sidebars_widgets = retrieve_widgets(); 1082 1059 } 1083 1060 } 1084 1061 … … 1215 1192 function _get_widget_id_base($id) { 1216 1193 return preg_replace( '/-[0-9]+$/', '', $id ); 1217 1194 } 1195 1196 // look for "lost" widgets, this has to run at least on each theme change 1197 function retrieve_widgets() { 1198 global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets; 1199 1200 $sidebars = array_keys($wp_registered_sidebars); 1201 1202 unset( $sidebars_widgets['array_version'] ); 1203 1204 $old = array_keys($sidebars_widgets); 1205 sort($old); 1206 sort($sidebars); 1207 1208 if ( $old == $sidebars ) 1209 return; 1210 1211 1212 $_sidebars_widgets = array( 1213 'wp_inactive_widgets' => $sidebars_widgets['wp_inactive_widgets'] 1214 ); 1215 unset( $sidebars_widgets['wp_inactive_widgets'] ); 1216 foreach ( $wp_registered_sidebars as $id => $settings ) { 1217 if ( ! empty( $sidebars_widgets ) ) 1218 $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 1219 } 1220 if ( ! empty( $sidebars_widgets ) ) 1221 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $sidebars_widgets ); 1222 1223 // discard invalid, theme-specific widgets from sidebars 1224 $shown_widgets = array(); 1225 foreach ( $_sidebars_widgets as $sidebar => $widgets ) { 1226 if ( !is_array($widgets) ) 1227 continue; 1228 1229 $_widgets = array(); 1230 foreach ( $widgets as $widget ) { 1231 if ( isset($wp_registered_widgets[$widget]) ) 1232 $_widgets[] = $widget; 1233 } 1234 $_sidebars_widgets[$sidebar] = $_widgets; 1235 $shown_widgets = array_merge($shown_widgets, $_widgets); 1236 } 1237 1238 $sidebars_widgets = $_sidebars_widgets; 1239 unset($_sidebars_widgets, $_widgets); 1240 1241 // find hidden/lost multi-widget instances 1242 $lost_widgets = array(); 1243 foreach ( $wp_registered_widgets as $key => $val ) { 1244 if ( in_array($key, $shown_widgets, true) ) 1245 continue; 1246 1247 $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key); 1248 1249 if ( 2 > (int) $number ) 1250 continue; 1251 1252 $lost_widgets[] = $key; 1253 } 1254 1255 $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']); 1256 wp_set_sidebars_widgets($sidebars_widgets); 1257 return $sidebars_widgets; 1258 } -
wp-admin/widgets.php
62 62 if ( empty( $sidebars_widgets ) ) 63 63 $sidebars_widgets = wp_get_widget_defaults(); 64 64 65 // look for "lost" widgets, this has to run at least on each theme change66 function retrieve_widgets() {67 global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets;68 69 $_sidebars_widgets = array();70 $sidebars = array_keys($wp_registered_sidebars);71 72 unset( $sidebars_widgets['array_version'] );73 74 $old = array_keys($sidebars_widgets);75 sort($old);76 sort($sidebars);77 78 if ( $old == $sidebars )79 return;80 81 // Move the known-good ones first82 foreach ( $sidebars as $id ) {83 if ( array_key_exists( $id, $sidebars_widgets ) ) {84 $_sidebars_widgets[$id] = $sidebars_widgets[$id];85 unset($sidebars_widgets[$id], $sidebars[$id]);86 }87 }88 89 // if new theme has less sidebars than the old theme90 if ( !empty($sidebars_widgets) ) {91 foreach ( $sidebars_widgets as $lost => $val ) {92 if ( is_array($val) )93 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val );94 }95 }96 97 // discard invalid, theme-specific widgets from sidebars98 $shown_widgets = array();99 foreach ( $_sidebars_widgets as $sidebar => $widgets ) {100 if ( !is_array($widgets) )101 continue;102 103 $_widgets = array();104 foreach ( $widgets as $widget ) {105 if ( isset($wp_registered_widgets[$widget]) )106 $_widgets[] = $widget;107 }108 $_sidebars_widgets[$sidebar] = $_widgets;109 $shown_widgets = array_merge($shown_widgets, $_widgets);110 }111 112 $sidebars_widgets = $_sidebars_widgets;113 unset($_sidebars_widgets, $_widgets);114 115 // find hidden/lost multi-widget instances116 $lost_widgets = array();117 foreach ( $wp_registered_widgets as $key => $val ) {118 if ( in_array($key, $shown_widgets, true) )119 continue;120 121 $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key);122 123 if ( 2 > (int) $number )124 continue;125 126 $lost_widgets[] = $key;127 }128 129 $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']);130 wp_set_sidebars_widgets($sidebars_widgets);131 }132 65 retrieve_widgets(); 133 66 134 67 if ( count($wp_registered_sidebars) == 1 ) {
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)