WordPress.org

Make WordPress Core

Ticket #10300: 10300.2.diff

File 10300.2.diff, 2.8 KB (added by Denis-de-Bernardy, 9 years ago)
  • wp-includes/widgets.php

     
    967967                if ( empty($_wp_sidebars_widgets) )
    968968                        $sidebars_widgets = get_option('sidebars_widgets', array());
    969969                else
    970                         $sidebars_widgets = &$_wp_sidebars_widgets;
     970                        return apply_filters('sidebars_widgets', $_wp_sidebars_widgets);
    971971        }
    972972        $_sidebars_widgets = array();
    973973
     
    10241024                                        }
    10251025                                }
    10261026
    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;
     1027                                // move the rest to wp_inactive_widgets
     1028                                if ( !isset($_sidebars_widgets['wp_inactive_widgets']) )
     1029                                        $_sidebars_widgets['wp_inactive_widgets'] = array();
     1030                               
     1031                                if ( !empty($sidebars_widgets) ) {
     1032                                        foreach ( $sidebars_widgets as $lost => $val ) {
     1033                                                if ( is_array($val) )
     1034                                                        $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val );
     1035                                        }
     1036                                }
    10311037
    1032                                 $_sidebars_widgets['array_version'] = 3;
    10331038                                $sidebars_widgets = $_sidebars_widgets;
    10341039                                unset($_sidebars_widgets);
    10351040                        }
     1041                       
     1042                        $sidebars_widgets['array_version'] = 3;
    10361043
    10371044                        if ( $update && is_admin() )
    10381045                                update_option('sidebars_widgets', $sidebars_widgets);
     
    10411048        if ( isset($sidebars_widgets['array_version']) )
    10421049                unset($sidebars_widgets['array_version']);
    10431050
     1051        if ( !is_admin() )
     1052                $_wp_sidebars_widgets = $sidebars_widgets;
     1053
    10441054        $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets);
    10451055        return $sidebars_widgets;
    10461056}
     
    10871097 */
    10881098function wp_convert_widget_settings($base_name, $option_name, $settings) {
    10891099        global $_wp_sidebars_widgets;
     1100       
    10901101        // This test may need expanding.
    1091         $single = false;
     1102        $single = $changed = false;
    10921103        if ( empty($settings) ) {
    10931104                $single = true;
    10941105        } else {
     
    11091120                if ( is_admin() ) {
    11101121                        $sidebars_widgets = get_option('sidebars_widgets');
    11111122                } else {
    1112                         if ( empty($GLOBALS['_wp_sidebars_widgets']) )
    1113                                 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets');
    1114                         $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets'];
     1123                        if ( empty($_wp_sidebars_widgets) )
     1124                                wp_get_sidebars_widgets(false);
     1125                        $sidebars_widgets = &$_wp_sidebars_widgets;
    11151126                }
    11161127
    11171128                foreach ( (array) $sidebars_widgets as $index => $sidebar ) {
     
    11191130                                foreach ( $sidebar as $i => $name ) {
    11201131                                        if ( $base_name == $name ) {
    11211132                                                $sidebars_widgets[$index][$i] = "$name-2";
     1133                                                $changed = true;
    11221134                                                break 2;
    11231135                                        }
    11241136                                }
    11251137                        }
    11261138                }
    11271139
    1128                 if ( is_admin() )
     1140                if ( is_admin() && $changed )
    11291141                        update_option('sidebars_widgets', $sidebars_widgets);
    11301142        }
    11311143