WordPress.org

Make WordPress Core

Ticket #10300: 10300.3.diff

File 10300.3.diff, 2.8 KB (added by Denis-de-Bernardy, 5 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