Ticket #10300: 10300.4.diff
File 10300.4.diff, 4.1 KB (added by , 16 years ago) |
---|
-
wp-includes/widgets.php
945 945 /* Internal Functions */ 946 946 947 947 /** 948 * Retrieve full list of sidebars and their widgets.948 * Migrate an old sidebars_widgets option 949 949 * 950 * Will upgrade sidebar widget list, if needed. Will also save updated list, if 951 * needed. 952 * 953 * @since 2.2.0 950 * @since 2.8.1 954 951 * @access private 955 952 * 956 953 * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 957 954 * @return array Upgraded list of widgets to version 2 array format. 958 */ 959 function wp_get_sidebars_widgets($update = true) { 955 **/ 956 957 function wp_migrate_widgets($update = true) { 960 958 global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 961 959 962 960 // If loading from front page, consult $_wp_sidebars_widgets rather than options … … 967 965 if ( empty($_wp_sidebars_widgets) ) 968 966 $sidebars_widgets = get_option('sidebars_widgets', array()); 969 967 else 970 $sidebars_widgets = &$_wp_sidebars_widgets;968 return $_wp_sidebars_widgets; 971 969 } 972 970 $_sidebars_widgets = array(); 973 971 … … 1024 1022 } 1025 1023 } 1026 1024 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; 1025 // move the rest to wp_inactive_widgets 1026 if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 1027 $_sidebars_widgets['wp_inactive_widgets'] = array(); 1028 1029 if ( !empty($sidebars_widgets) ) { 1030 foreach ( $sidebars_widgets as $lost => $val ) { 1031 if ( is_array($val) ) 1032 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 1033 } 1034 } 1031 1035 1032 $_sidebars_widgets['array_version'] = 3;1033 1036 $sidebars_widgets = $_sidebars_widgets; 1034 1037 unset($_sidebars_widgets); 1035 1038 } 1039 1040 $sidebars_widgets['array_version'] = 3; 1036 1041 1037 1042 if ( $update && is_admin() ) 1038 1043 update_option('sidebars_widgets', $sidebars_widgets); 1039 1044 } 1040 1045 1041 if ( isset($sidebars_widgets['array_version']) ) 1042 unset($sidebars_widgets['array_version']); 1046 unset($sidebars_widgets['array_version']); 1047 1048 return $sidebars_widgets; 1049 } # wp_migrate_widgets() 1043 1050 1044 $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets); 1045 return $sidebars_widgets; 1051 /** 1052 * Retrieve full list of sidebars and their widgets. 1053 * 1054 * Will upgrade sidebar widget list, if needed. Will also save updated list, if 1055 * needed. 1056 * 1057 * @since 2.2.0 1058 * @access private 1059 * 1060 * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 1061 * @return array Upgraded list of widgets to version 2 array format. 1062 */ 1063 function wp_get_sidebars_widgets($update = true) { 1064 return apply_filters('sidebars_widgets', wp_migrate_widgets($update)); 1046 1065 } 1047 1066 1048 1067 /** … … 1087 1106 */ 1088 1107 function wp_convert_widget_settings($base_name, $option_name, $settings) { 1089 1108 global $_wp_sidebars_widgets; 1109 1090 1110 // This test may need expanding. 1091 $single = false;1111 $single = $changed = false; 1092 1112 if ( empty($settings) ) { 1093 1113 $single = true; 1094 1114 } else { … … 1109 1129 if ( is_admin() ) { 1110 1130 $sidebars_widgets = get_option('sidebars_widgets'); 1111 1131 } else { 1112 if ( empty($ GLOBALS['_wp_sidebars_widgets']) )1113 $ GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets');1114 $sidebars_widgets = &$ GLOBALS['_wp_sidebars_widgets'];1132 if ( empty($_wp_sidebars_widgets) ) 1133 $_wp_sidebars_widgets = wp_migrate_widgets(false); 1134 $sidebars_widgets = &$_wp_sidebars_widgets; 1115 1135 } 1116 1136 1117 1137 foreach ( (array) $sidebars_widgets as $index => $sidebar ) { … … 1119 1139 foreach ( $sidebar as $i => $name ) { 1120 1140 if ( $base_name == $name ) { 1121 1141 $sidebars_widgets[$index][$i] = "$name-2"; 1142 $changed = true; 1122 1143 break 2; 1123 1144 } 1124 1145 } 1125 1146 } 1126 1147 } 1127 1148 1128 if ( is_admin() )1149 if ( is_admin() && $changed ) 1129 1150 update_option('sidebars_widgets', $sidebars_widgets); 1130 1151 } 1131 1152