WordPress.org

Make WordPress Core

Ticket #17979: 17979.14.diff

File 17979.14.diff, 6.6 KB (added by SergeyBiryukov, 4 years ago)
  • wp-admin/includes/upgrade.php

     
    451451        if ( $wp_current_db_version < 15260 ) 
    452452                upgrade_300(); 
    453453 
     454        if ( $wp_current_db_version < 11548 ) 
     455                upgrade_old_widgets_order_array(); 
     456 
    454457        maybe_disable_automattic_widgets(); 
    455458 
    456459        update_option( 'db_version', $wp_db_version ); 
     
    11321135} 
    11331136 
    11341137/** 
     1138 * Convert the old style widgets order array from 2.2. 
     1139 * 
     1140 * @since 3.3.0 
     1141 */ 
     1142function upgrade_old_widgets_order_array() { 
     1143        global $wp_registered_widgets, $sidebars_widgets; 
     1144 
     1145        $sidebars_widgets = get_option( 'sidebars_widgets', array() ); 
     1146        $_sidebars_widgets = array(); 
     1147 
     1148        if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) 
     1149                $sidebars_widgets['array_version'] = 3; 
     1150        elseif ( !isset($sidebars_widgets['array_version']) ) 
     1151                $sidebars_widgets['array_version'] = 1; 
     1152 
     1153        switch ( $sidebars_widgets['array_version'] ) { 
     1154                case 1 : 
     1155                        foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
     1156                        if ( is_array($sidebar) ) 
     1157                        foreach ( (array) $sidebar as $i => $name ) { 
     1158                                $id = strtolower($name); 
     1159                                if ( isset($wp_registered_widgets[$id]) ) { 
     1160                                        $_sidebars_widgets[$index][$i] = $id; 
     1161                                        continue; 
     1162                                } 
     1163                                $id = sanitize_title($name); 
     1164                                if ( isset($wp_registered_widgets[$id]) ) { 
     1165                                        $_sidebars_widgets[$index][$i] = $id; 
     1166                                        continue; 
     1167                                } 
     1168 
     1169                                $found = false; 
     1170 
     1171                                foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
     1172                                        if ( strtolower($widget['name']) == strtolower($name) ) { 
     1173                                                $_sidebars_widgets[$index][$i] = $widget['id']; 
     1174                                                $found = true; 
     1175                                                break; 
     1176                                        } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
     1177                                                $_sidebars_widgets[$index][$i] = $widget['id']; 
     1178                                                $found = true; 
     1179                                                break; 
     1180                                        } 
     1181                                } 
     1182 
     1183                                if ( $found ) 
     1184                                        continue; 
     1185 
     1186                                unset($_sidebars_widgets[$index][$i]); 
     1187                        } 
     1188                        $_sidebars_widgets['array_version'] = 2; 
     1189                        $sidebars_widgets = $_sidebars_widgets; 
     1190                        unset($_sidebars_widgets); 
     1191 
     1192                case 2 : 
     1193                        $sidebars_widgets = retrieve_widgets(); 
     1194                        $sidebars_widgets['array_version'] = 3; 
     1195                        update_option( 'sidebars_widgets', $sidebars_widgets ); 
     1196        } 
     1197} 
     1198 
     1199/** 
    11351200 * Execute network level changes 
    11361201 * 
    11371202 * @since 3.0.0 
  • wp-includes/theme.php

     
    12481248function switch_theme($template, $stylesheet) { 
    12491249        global $wp_theme_directories, $sidebars_widgets; 
    12501250 
    1251         if ( ! is_array( $sidebars_widgets ) ) 
    1252                 $sidebars_widgets = wp_get_sidebars_widgets(); 
    1253         set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $sidebars_widgets ) ); 
     1251        if ( is_array( $sidebars_widgets ) ) 
     1252                set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $sidebars_widgets ) ); 
    12541253 
    12551254        $old_theme = get_current_theme(); 
    12561255 
  • wp-includes/widgets.php

     
    998998        if ( $deprecated !== true ) 
    999999                _deprecated_argument( __FUNCTION__, '2.8.1' ); 
    10001000 
    1001         global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 
     1001        global $wp_registered_widgets, $_wp_sidebars_widgets, $sidebars_widgets; 
    10021002 
    10031003        // If loading from front page, consult $_wp_sidebars_widgets rather than options 
    10041004        // to see if wp_convert_widget_settings() has made manipulations in memory. 
     
    10091009                $sidebars_widgets = $_wp_sidebars_widgets; 
    10101010        } else { 
    10111011                $sidebars_widgets = get_option('sidebars_widgets', array()); 
    1012                 $_sidebars_widgets = array(); 
    1013  
    1014                 if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) 
    1015                         $sidebars_widgets['array_version'] = 3; 
    1016                 elseif ( !isset($sidebars_widgets['array_version']) ) 
    1017                         $sidebars_widgets['array_version'] = 1; 
    1018  
    1019                 switch ( $sidebars_widgets['array_version'] ) { 
    1020                         case 1 : 
    1021                                 foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
    1022                                 if ( is_array($sidebar) ) 
    1023                                 foreach ( (array) $sidebar as $i => $name ) { 
    1024                                         $id = strtolower($name); 
    1025                                         if ( isset($wp_registered_widgets[$id]) ) { 
    1026                                                 $_sidebars_widgets[$index][$i] = $id; 
    1027                                                 continue; 
    1028                                         } 
    1029                                         $id = sanitize_title($name); 
    1030                                         if ( isset($wp_registered_widgets[$id]) ) { 
    1031                                                 $_sidebars_widgets[$index][$i] = $id; 
    1032                                                 continue; 
    1033                                         } 
    1034  
    1035                                         $found = false; 
    1036  
    1037                                         foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
    1038                                                 if ( strtolower($widget['name']) == strtolower($name) ) { 
    1039                                                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    1040                                                         $found = true; 
    1041                                                         break; 
    1042                                                 } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
    1043                                                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    1044                                                         $found = true; 
    1045                                                         break; 
    1046                                                 } 
    1047                                         } 
    1048  
    1049                                         if ( $found ) 
    1050                                                 continue; 
    1051  
    1052                                         unset($_sidebars_widgets[$index][$i]); 
    1053                                 } 
    1054                                 $_sidebars_widgets['array_version'] = 2; 
    1055                                 $sidebars_widgets = $_sidebars_widgets; 
    1056                                 unset($_sidebars_widgets); 
    1057  
    1058                         case 2 : 
    1059                                 $sidebars_widgets = retrieve_widgets(); 
    1060                 } 
    10611012        } 
    10621013 
    10631014        if ( is_array( $sidebars_widgets ) && isset($sidebars_widgets['array_version']) ) 
     
    12191170                $_sidebars_widgets = $old_sidebars_widgets['data']; 
    12201171                remove_theme_mod( 'sidebars_widgets' ); 
    12211172        } else { 
    1222                 if ( ! is_array( $sidebars_widgets ) ) 
    1223                         $sidebars_widgets = wp_get_sidebars_widgets(); 
     1173                if ( empty( $sidebars_widgets ) ) 
     1174                        return; 
    12241175 
    12251176                $sidebars = array_keys($wp_registered_sidebars); 
    12261177 
     
    12341185                        return; 
    12351186 
    12361187                $_sidebars_widgets = array( 
    1237                         'wp_inactive_widgets' => $sidebars_widgets['wp_inactive_widgets'] 
     1188                        'wp_inactive_widgets' => !empty( $sidebars_widgets['wp_inactive_widgets'] ) ? $sidebars_widgets['wp_inactive_widgets'] : array() 
    12381189                ); 
    12391190 
    12401191                unset( $sidebars_widgets['wp_inactive_widgets'] ); 
    12411192 
    1242                 foreach ( $wp_registered_sidebars as $id => $settings ) { 
    1243                         if ( ! empty( $sidebars_widgets ) ) 
    1244                                 $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 
    1245                 } 
     1193                foreach ( $wp_registered_sidebars as $id => $settings ) 
     1194                        $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 
    12461195 
    1247                 if ( !empty($sidebars_widgets) ) { 
    1248                         $orphaned = 0; 
     1196                $orphaned = 0; 
    12491197 
    1250                         foreach ( $sidebars_widgets as $val ) { 
    1251                                 if ( is_array($val) && ! empty( $val ) ) 
    1252                                         $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; 
    1253                         } 
     1198                foreach ( $sidebars_widgets as $val ) { 
     1199                        if ( is_array($val) && ! empty( $val ) ) 
     1200                                $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; 
    12541201                } 
    12551202        } 
    12561203