WordPress.org

Make WordPress Core

Ticket #10300: 10300.4.diff

File 10300.4.diff, 4.1 KB (added by Denis-de-Bernardy, 6 years ago)
  • wp-includes/widgets.php

     
    945945/* Internal Functions */ 
    946946 
    947947/** 
    948  * Retrieve full list of sidebars and their widgets. 
     948 * Migrate an old sidebars_widgets option 
    949949 * 
    950  * Will upgrade sidebar widget list, if needed. Will also save updated list, if 
    951  * needed. 
    952  * 
    953  * @since 2.2.0 
     950 * @since 2.8.1 
    954951 * @access private 
    955952 * 
    956953 * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 
    957954 * @return array Upgraded list of widgets to version 2 array format. 
    958  */ 
    959 function wp_get_sidebars_widgets($update = true) { 
     955 **/ 
     956 
     957function wp_migrate_widgets($update = true) { 
    960958        global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 
    961959 
    962960        // If loading from front page, consult $_wp_sidebars_widgets rather than options 
     
    967965                if ( empty($_wp_sidebars_widgets) ) 
    968966                        $sidebars_widgets = get_option('sidebars_widgets', array()); 
    969967                else 
    970                         $sidebars_widgets = &$_wp_sidebars_widgets; 
     968                        return $_wp_sidebars_widgets; 
    971969        } 
    972970        $_sidebars_widgets = array(); 
    973971 
     
    10241022                                        } 
    10251023                                } 
    10261024 
    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; 
     1025                                // move the rest to wp_inactive_widgets 
     1026                                if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 
     1027                                        $_sidebars_widgets['wp_inactive_widgets'] = array(); 
     1028                                 
     1029                                if ( !empty($sidebars_widgets) ) { 
     1030                                        foreach ( $sidebars_widgets as $lost => $val ) { 
     1031                                                if ( is_array($val) ) 
     1032                                                        $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 
     1033                                        } 
     1034                                } 
    10311035 
    1032                                 $_sidebars_widgets['array_version'] = 3; 
    10331036                                $sidebars_widgets = $_sidebars_widgets; 
    10341037                                unset($_sidebars_widgets); 
    10351038                        } 
     1039                         
     1040                        $sidebars_widgets['array_version'] = 3; 
    10361041 
    10371042                        if ( $update && is_admin() ) 
    10381043                                update_option('sidebars_widgets', $sidebars_widgets); 
    10391044        } 
    10401045 
    1041         if ( isset($sidebars_widgets['array_version']) ) 
    1042                 unset($sidebars_widgets['array_version']); 
     1046        unset($sidebars_widgets['array_version']); 
     1047         
     1048        return $sidebars_widgets; 
     1049} # wp_migrate_widgets() 
    10431050 
    1044         $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets); 
    1045         return $sidebars_widgets; 
     1051/** 
     1052 * Retrieve full list of sidebars and their widgets. 
     1053 * 
     1054 * Will upgrade sidebar widget list, if needed. Will also save updated list, if 
     1055 * needed. 
     1056 * 
     1057 * @since 2.2.0 
     1058 * @access private 
     1059 * 
     1060 * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 
     1061 * @return array Upgraded list of widgets to version 2 array format. 
     1062 */ 
     1063function wp_get_sidebars_widgets($update = true) { 
     1064        return apply_filters('sidebars_widgets', wp_migrate_widgets($update)); 
    10461065} 
    10471066 
    10481067/** 
     
    10871106 */ 
    10881107function wp_convert_widget_settings($base_name, $option_name, $settings) { 
    10891108        global $_wp_sidebars_widgets; 
     1109         
    10901110        // This test may need expanding. 
    1091         $single = false; 
     1111        $single = $changed = false; 
    10921112        if ( empty($settings) ) { 
    10931113                $single = true; 
    10941114        } else { 
     
    11091129                if ( is_admin() ) { 
    11101130                        $sidebars_widgets = get_option('sidebars_widgets'); 
    11111131                } else { 
    1112                         if ( empty($GLOBALS['_wp_sidebars_widgets']) ) 
    1113                                 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); 
    1114                         $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 
     1132                        if ( empty($_wp_sidebars_widgets) ) 
     1133                                $_wp_sidebars_widgets = wp_migrate_widgets(false); 
     1134                        $sidebars_widgets = &$_wp_sidebars_widgets; 
    11151135                } 
    11161136 
    11171137                foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 
     
    11191139                                foreach ( $sidebar as $i => $name ) { 
    11201140                                        if ( $base_name == $name ) { 
    11211141                                                $sidebars_widgets[$index][$i] = "$name-2"; 
     1142                                                $changed = true; 
    11221143                                                break 2; 
    11231144                                        } 
    11241145                                } 
    11251146                        } 
    11261147                } 
    11271148 
    1128                 if ( is_admin() ) 
     1149                if ( is_admin() && $changed ) 
    11291150                        update_option('sidebars_widgets', $sidebars_widgets); 
    11301151        } 
    11311152