WordPress.org

Make WordPress Core

Ticket #10300: 10300.4.patch

File 10300.4.patch, 2.7 KB (added by azaozz, 9 years ago)
  • wp-includes/widgets.php

     
    965965                $sidebars_widgets = get_option('sidebars_widgets', array());
    966966        } else {
    967967                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;
    971971        }
    972972        $_sidebars_widgets = array();
    973973
    974         if ( !isset($sidebars_widgets['array_version']) )
     974        if ( isset($sidebars_widgets['wp_inactive_widgets']) )
     975                $sidebars_widgets['array_version'] = 3;
     976        elseif ( !isset($sidebars_widgets['array_version']) )
    975977                $sidebars_widgets['array_version'] = 1;
    976978
    977979        switch ( $sidebars_widgets['array_version'] ) {
     
    10241026                                        }
    10251027                                }
    10261028
    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;
     1029                                // move the rest to wp_inactive_widgets
     1030                                if ( !isset($_sidebars_widgets['wp_inactive_widgets']) )
     1031                                        $_sidebars_widgets['wp_inactive_widgets'] = array();
     1032                               
     1033                                if ( !empty($sidebars_widgets) ) {
     1034                                        foreach ( $sidebars_widgets as $lost => $val ) {
     1035                                                if ( is_array($val) )
     1036                                                        $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val );
     1037                                        }
     1038                                }
    10311039
    1032                                 $_sidebars_widgets['array_version'] = 3;
    10331040                                $sidebars_widgets = $_sidebars_widgets;
    10341041                                unset($_sidebars_widgets);
    10351042                        }
    10361043
     1044                        $sidebars_widgets['array_version'] = 3;
    10371045                        if ( $update && is_admin() )
    10381046                                update_option('sidebars_widgets', $sidebars_widgets);
    10391047        }
    10401048
     1049        if ( !is_admin() )
     1050                $_wp_sidebars_widgets = $sidebars_widgets;
     1051       
    10411052        if ( isset($sidebars_widgets['array_version']) )
    10421053                unset($sidebars_widgets['array_version']);
    10431054
     
    10861097 * @return array
    10871098 */
    10881099function wp_convert_widget_settings($base_name, $option_name, $settings) {
    1089         global $_wp_sidebars_widgets;
    10901100        // This test may need expanding.
    1091         $single = false;
     1101        $single = $changed = false;
    10921102        if ( empty($settings) ) {
    10931103                $single = true;
    10941104        } else {
     
    11191129                                foreach ( $sidebar as $i => $name ) {
    11201130                                        if ( $base_name == $name ) {
    11211131                                                $sidebars_widgets[$index][$i] = "$name-2";
     1132                                                $changed = true;
    11221133                                                break 2;
    11231134                                        }
    11241135                                }
    11251136                        }
    11261137                }
    11271138
    1128                 if ( is_admin() )
     1139                if ( is_admin() && $changed )
    11291140                        update_option('sidebars_widgets', $sidebars_widgets);
    11301141        }
    11311142