WordPress.org

Make WordPress Core

Ticket #17979: 17979.14.diff

File 17979.14.diff, 6.6 KB (added by SergeyBiryukov, 7 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