WordPress.org

Make WordPress Core

Ticket #10300: 10300.4.diff

File 10300.4.diff, 4.1 KB (added by Denis-de-Bernardy, 9 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