Ticket #10300: 10300.7.diff
File 10300.7.diff, 4.6 KB (added by , 16 years ago) |
---|
-
wp-includes/widgets.php
957 957 * @return array Upgraded list of widgets to version 2 array format. 958 958 */ 959 959 function wp_get_sidebars_widgets($update = true) { 960 global $ wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets;961 960 global $_wp_sidebars_widgets; 961 962 962 // If loading from front page, consult $_wp_sidebars_widgets rather than options 963 963 // to see if wp_convert_widget_settings() has made manipulations in memory. 964 964 if ( is_admin() ) { 965 965 $sidebars_widgets = get_option('sidebars_widgets', array()); 966 966 } else { 967 967 if ( empty($_wp_sidebars_widgets) ) 968 $ sidebars_widgets = get_option('sidebars_widgets', array());969 else 970 $sidebars_widgets = &$_wp_sidebars_widgets;968 $_wp_sidebars_widgets = get_option('sidebars_widgets', array()); 969 970 $sidebars_widgets = $_wp_sidebars_widgets; 971 971 } 972 $_sidebars_widgets = array();973 972 974 if ( !isset($sidebars_widgets['array_version']) ) 975 $sidebars_widgets['array_version'] = 1; 976 977 switch ( $sidebars_widgets['array_version'] ) { 978 case 1 : 979 foreach ( (array) $sidebars_widgets as $index => $sidebar ) 980 if ( is_array($sidebar) ) 981 foreach ( (array) $sidebar as $i => $name ) { 982 $id = strtolower($name); 983 if ( isset($wp_registered_widgets[$id]) ) { 984 $_sidebars_widgets[$index][$i] = $id; 985 continue; 986 } 987 $id = sanitize_title($name); 988 if ( isset($wp_registered_widgets[$id]) ) { 989 $_sidebars_widgets[$index][$i] = $id; 990 continue; 991 } 992 993 $found = false; 994 995 foreach ( $wp_registered_widgets as $widget_id => $widget ) { 996 if ( strtolower($widget['name']) == strtolower($name) ) { 997 $_sidebars_widgets[$index][$i] = $widget['id']; 998 $found = true; 999 break; 1000 } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 1001 $_sidebars_widgets[$index][$i] = $widget['id']; 1002 $found = true; 1003 break; 1004 } 1005 } 1006 1007 if ( $found ) 1008 continue; 1009 1010 unset($_sidebars_widgets[$index][$i]); 1011 } 1012 $_sidebars_widgets['array_version'] = 2; 1013 $sidebars_widgets = $_sidebars_widgets; 1014 unset($_sidebars_widgets); 1015 1016 case 2 : 1017 $sidebars = array_keys( $wp_registered_sidebars ); 1018 if ( !empty( $sidebars ) ) { 1019 // Move the known-good ones first 1020 foreach ( (array) $sidebars as $id ) { 1021 if ( array_key_exists( $id, $sidebars_widgets ) ) { 1022 $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 1023 unset($sidebars_widgets[$id], $sidebars[$id]); 1024 } 1025 } 1026 1027 // Assign to each unmatched registered sidebar the first available orphan 1028 unset( $sidebars_widgets[ 'array_version' ] ); 1029 while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) 1030 $_sidebars_widgets[ $sidebar ] = $widgets; 1031 1032 $_sidebars_widgets['array_version'] = 3; 1033 $sidebars_widgets = $_sidebars_widgets; 1034 unset($_sidebars_widgets); 1035 } 1036 1037 if ( $update && is_admin() ) 1038 update_option('sidebars_widgets', $sidebars_widgets); 973 if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) { 974 $sidebars_widgets = array('array_version' => 3 ); 975 if ( $update && is_admin() ) 976 update_option('sidebars_widgets', array()); 1039 977 } 1040 978 1041 if ( isset($sidebars_widgets['array_version']) ) 1042 unset($sidebars_widgets['array_version']); 979 if ( !is_admin() ) 980 $_wp_sidebars_widgets = $sidebars_widgets; 981 982 unset($sidebars_widgets['array_version']); 1043 983 1044 984 $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets); 1045 985 return $sidebars_widgets; … … 1086 1026 * @return array 1087 1027 */ 1088 1028 function wp_convert_widget_settings($base_name, $option_name, $settings) { 1089 global $_wp_sidebars_widgets;1090 1029 // This test may need expanding. 1091 $single = false;1030 $single = $changed = false; 1092 1031 if ( empty($settings) ) { 1093 1032 $single = true; 1094 1033 } else { … … 1113 1052 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); 1114 1053 $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 1115 1054 } 1055 1056 if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) { 1057 $sidebars_widgets = array('array_version' => 3 ); 1058 } 1116 1059 1117 1060 foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 1118 1061 if ( is_array($sidebar) ) { 1119 1062 foreach ( $sidebar as $i => $name ) { 1120 1063 if ( $base_name == $name ) { 1121 1064 $sidebars_widgets[$index][$i] = "$name-2"; 1065 $changed = true; 1122 1066 break 2; 1123 1067 } 1124 1068 } 1125 1069 } 1126 1070 } 1127 1071 1128 if ( is_admin() )1072 if ( is_admin() && $changed ) 1129 1073 update_option('sidebars_widgets', $sidebars_widgets); 1130 1074 } 1131 1075