| 1 | Index: wp-includes/widgets.php |
|---|
| 2 | =================================================================== |
|---|
| 3 | --- wp-includes/widgets.php (revision 11685) |
|---|
| 4 | +++ wp-includes/widgets.php (working copy) |
|---|
| 5 | @@ -957,89 +957,29 @@ |
|---|
| 6 | * @return array Upgraded list of widgets to version 2 array format. |
|---|
| 7 | */ |
|---|
| 8 | function wp_get_sidebars_widgets($update = true) { |
|---|
| 9 | - global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; |
|---|
| 10 | - |
|---|
| 11 | + global $_wp_sidebars_widgets; |
|---|
| 12 | + |
|---|
| 13 | // If loading from front page, consult $_wp_sidebars_widgets rather than options |
|---|
| 14 | // to see if wp_convert_widget_settings() has made manipulations in memory. |
|---|
| 15 | if ( is_admin() ) { |
|---|
| 16 | $sidebars_widgets = get_option('sidebars_widgets', array()); |
|---|
| 17 | } else { |
|---|
| 18 | if ( empty($_wp_sidebars_widgets) ) |
|---|
| 19 | - $sidebars_widgets = get_option('sidebars_widgets', array()); |
|---|
| 20 | - else |
|---|
| 21 | - $sidebars_widgets = &$_wp_sidebars_widgets; |
|---|
| 22 | + $_wp_sidebars_widgets = get_option('sidebars_widgets', array()); |
|---|
| 23 | + |
|---|
| 24 | + $sidebars_widgets = $_wp_sidebars_widgets; |
|---|
| 25 | } |
|---|
| 26 | - $_sidebars_widgets = array(); |
|---|
| 27 | |
|---|
| 28 | - if ( !isset($sidebars_widgets['array_version']) ) |
|---|
| 29 | - $sidebars_widgets['array_version'] = 1; |
|---|
| 30 | - |
|---|
| 31 | - switch ( $sidebars_widgets['array_version'] ) { |
|---|
| 32 | - case 1 : |
|---|
| 33 | - foreach ( (array) $sidebars_widgets as $index => $sidebar ) |
|---|
| 34 | - if ( is_array($sidebar) ) |
|---|
| 35 | - foreach ( (array) $sidebar as $i => $name ) { |
|---|
| 36 | - $id = strtolower($name); |
|---|
| 37 | - if ( isset($wp_registered_widgets[$id]) ) { |
|---|
| 38 | - $_sidebars_widgets[$index][$i] = $id; |
|---|
| 39 | - continue; |
|---|
| 40 | - } |
|---|
| 41 | - $id = sanitize_title($name); |
|---|
| 42 | - if ( isset($wp_registered_widgets[$id]) ) { |
|---|
| 43 | - $_sidebars_widgets[$index][$i] = $id; |
|---|
| 44 | - continue; |
|---|
| 45 | - } |
|---|
| 46 | - |
|---|
| 47 | - $found = false; |
|---|
| 48 | - |
|---|
| 49 | - foreach ( $wp_registered_widgets as $widget_id => $widget ) { |
|---|
| 50 | - if ( strtolower($widget['name']) == strtolower($name) ) { |
|---|
| 51 | - $_sidebars_widgets[$index][$i] = $widget['id']; |
|---|
| 52 | - $found = true; |
|---|
| 53 | - break; |
|---|
| 54 | - } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { |
|---|
| 55 | - $_sidebars_widgets[$index][$i] = $widget['id']; |
|---|
| 56 | - $found = true; |
|---|
| 57 | - break; |
|---|
| 58 | - } |
|---|
| 59 | - } |
|---|
| 60 | - |
|---|
| 61 | - if ( $found ) |
|---|
| 62 | - continue; |
|---|
| 63 | - |
|---|
| 64 | - unset($_sidebars_widgets[$index][$i]); |
|---|
| 65 | - } |
|---|
| 66 | - $_sidebars_widgets['array_version'] = 2; |
|---|
| 67 | - $sidebars_widgets = $_sidebars_widgets; |
|---|
| 68 | - unset($_sidebars_widgets); |
|---|
| 69 | - |
|---|
| 70 | - case 2 : |
|---|
| 71 | - $sidebars = array_keys( $wp_registered_sidebars ); |
|---|
| 72 | - if ( !empty( $sidebars ) ) { |
|---|
| 73 | - // Move the known-good ones first |
|---|
| 74 | - foreach ( (array) $sidebars as $id ) { |
|---|
| 75 | - if ( array_key_exists( $id, $sidebars_widgets ) ) { |
|---|
| 76 | - $_sidebars_widgets[$id] = $sidebars_widgets[$id]; |
|---|
| 77 | - unset($sidebars_widgets[$id], $sidebars[$id]); |
|---|
| 78 | - } |
|---|
| 79 | - } |
|---|
| 80 | - |
|---|
| 81 | - // Assign to each unmatched registered sidebar the first available orphan |
|---|
| 82 | - unset( $sidebars_widgets[ 'array_version' ] ); |
|---|
| 83 | - while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) |
|---|
| 84 | - $_sidebars_widgets[ $sidebar ] = $widgets; |
|---|
| 85 | - |
|---|
| 86 | - $_sidebars_widgets['array_version'] = 3; |
|---|
| 87 | - $sidebars_widgets = $_sidebars_widgets; |
|---|
| 88 | - unset($_sidebars_widgets); |
|---|
| 89 | - } |
|---|
| 90 | - |
|---|
| 91 | - if ( $update && is_admin() ) |
|---|
| 92 | - update_option('sidebars_widgets', $sidebars_widgets); |
|---|
| 93 | + if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) { |
|---|
| 94 | + $sidebars_widgets = array('array_version' => 3 ); |
|---|
| 95 | + if ( $update && is_admin() ) |
|---|
| 96 | + update_option('sidebars_widgets', array()); |
|---|
| 97 | } |
|---|
| 98 | |
|---|
| 99 | - if ( isset($sidebars_widgets['array_version']) ) |
|---|
| 100 | - unset($sidebars_widgets['array_version']); |
|---|
| 101 | + if ( !is_admin() ) |
|---|
| 102 | + $_wp_sidebars_widgets = $sidebars_widgets; |
|---|
| 103 | + |
|---|
| 104 | + unset($sidebars_widgets['array_version']); |
|---|
| 105 | |
|---|
| 106 | $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets); |
|---|
| 107 | return $sidebars_widgets; |
|---|
| 108 | @@ -1086,9 +1026,8 @@ |
|---|
| 109 | * @return array |
|---|
| 110 | */ |
|---|
| 111 | function wp_convert_widget_settings($base_name, $option_name, $settings) { |
|---|
| 112 | - global $_wp_sidebars_widgets; |
|---|
| 113 | // This test may need expanding. |
|---|
| 114 | - $single = false; |
|---|
| 115 | + $single = $changed = false; |
|---|
| 116 | if ( empty($settings) ) { |
|---|
| 117 | $single = true; |
|---|
| 118 | } else { |
|---|
| 119 | @@ -1113,19 +1052,24 @@ |
|---|
| 120 | $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); |
|---|
| 121 | $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; |
|---|
| 122 | } |
|---|
| 123 | + |
|---|
| 124 | + if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) { |
|---|
| 125 | + $sidebars_widgets = array('array_version' => 3 ); |
|---|
| 126 | + } |
|---|
| 127 | |
|---|
| 128 | foreach ( (array) $sidebars_widgets as $index => $sidebar ) { |
|---|
| 129 | if ( is_array($sidebar) ) { |
|---|
| 130 | foreach ( $sidebar as $i => $name ) { |
|---|
| 131 | if ( $base_name == $name ) { |
|---|
| 132 | $sidebars_widgets[$index][$i] = "$name-2"; |
|---|
| 133 | + $changed = true; |
|---|
| 134 | break 2; |
|---|
| 135 | } |
|---|
| 136 | } |
|---|
| 137 | } |
|---|
| 138 | } |
|---|
| 139 | |
|---|
| 140 | - if ( is_admin() ) |
|---|
| 141 | + if ( is_admin() && $changed ) |
|---|
| 142 | update_option('sidebars_widgets', $sidebars_widgets); |
|---|
| 143 | } |
|---|
| 144 | |
|---|