WordPress.org

Make WordPress Core

Changeset 18821


Ignore:
Timestamp:
09/29/11 21:41:22 (6 years ago)
Author:
ryan
Message:
  • Move the old sidebars_widgets array upgrade code to wp-admin/includes/upgrade.php
  • Avoid infinite loop with wp_get_sidebars_widgets()
  • Remove two unneeded wp_get_sidebars_widgets() calls
  • Remove unused $wp_registered_sidebars variable from wp_get_sidebars_widgets().
  • Combine a couple of !empty( $sidebars_widgets ) checks in retrieve_widgets()

Props SergeyBiryukov, lancewillett. fixes #17979 #18598

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/upgrade.php

    r18643 r18821  
    452452        upgrade_300(); 
    453453 
     454    if ( $wp_current_db_version < 11548 ) 
     455        upgrade_old_widgets_order_array(); 
     456 
    454457    maybe_disable_automattic_widgets(); 
    455458 
     
    11301133    } 
    11311134 
     1135} 
     1136 
     1137/** 
     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    } 
    11321197} 
    11331198 
  • trunk/wp-includes/theme.php

    r18720 r18821  
    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(); 
  • trunk/wp-includes/widgets.php

    r18678 r18821  
    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 
     
    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 
     
    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); 
     
    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         } 
    1246  
    1247         if ( !empty($sidebars_widgets) ) { 
    1248             $orphaned = 0; 
    1249  
    1250             foreach ( $sidebars_widgets as $val ) { 
    1251                 if ( is_array($val) && ! empty( $val ) ) 
    1252                     $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; 
    1253             } 
     1193        foreach ( $wp_registered_sidebars as $id => $settings ) 
     1194            $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 
     1195 
     1196        $orphaned = 0; 
     1197 
     1198        foreach ( $sidebars_widgets as $val ) { 
     1199            if ( is_array($val) && ! empty( $val ) ) 
     1200                $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; 
    12541201        } 
    12551202    } 
Note: See TracChangeset for help on using the changeset viewer.