WordPress.org

Make WordPress Core

Ticket #9629: 9629.diff

File 9629.diff, 2.6 KB (added by ryan, 6 years ago)
  • wp-includes/widgets.php

     
    340340$wp_registered_widget_controls = array(); 
    341341$wp_registered_widget_updates = array(); 
    342342 
     343/** 
     344 * Private 
     345 */ 
     346$_wp_sidebars_widgets = array(); 
     347 
    343348/* Template tags & API functions */ 
    344349 
    345350/** 
     
    836841 * @return array Upgraded list of widgets to version 2 array format. 
    837842 */ 
    838843function wp_get_sidebars_widgets($update = true) { 
    839         global $wp_registered_widgets, $wp_registered_sidebars; 
     844        global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 
    840845 
    841         $sidebars_widgets = get_option('sidebars_widgets', array()); 
     846        // If loading from front page, consult $_wp_sidebars_widgets rather than options 
     847        // to see if wp_convert_widget_settings() has made manipulations in memory. 
     848        if ( is_admin() ) { 
     849                $sidebars_widgets = get_option('sidebars_widgets', array()); 
     850        } else { 
     851                if ( empty($_wp_sidebars_widgets) ) 
     852                        $sidebars_widgets = get_option('sidebars_widgets', array()); 
     853                else 
     854                        $sidebars_widgets = &$_wp_sidebars_widgets; 
     855        } 
    842856        $_sidebars_widgets = array(); 
    843857 
    844858        if ( !isset($sidebars_widgets['array_version']) ) 
     
    904918                                unset($_sidebars_widgets); 
    905919                        } 
    906920 
    907                         if ( $update ) 
     921                        if ( $update && is_admin() ) 
    908922                                update_option('sidebars_widgets', $sidebars_widgets); 
    909923        } 
    910924 
     
    956970 * @return array 
    957971 */ 
    958972function wp_convert_widget_settings($base_name, $option_name, $settings) { 
     973        global $_wp_sidebars_widgets; 
    959974        // This test may need expanding. 
    960975        $single = false; 
    961976        if ( empty($settings) ) { 
     
    974989        if ( $single ) { 
    975990                $settings = array( 2 => $settings ); 
    976991 
    977                 $sidebars_widgets = get_option('sidebars_widgets'); 
     992                // If loading from the front page, update sidebar in memory but don't save to options 
     993                if ( is_admin() ) { 
     994                        $sidebars_widgets = get_option('sidebars_widgets'); 
     995                } else { 
     996                        if ( empty($GLOBALS['_wp_sidebars_widgets']) ) 
     997                                $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); 
     998                        $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 
     999                } 
     1000                 
    9781001                foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 
    9791002                        if ( is_array($sidebar) ) { 
    9801003                                foreach ( $sidebar as $i => $name ) { 
     
    9861009                        } 
    9871010                } 
    9881011 
    989                 update_option('sidebars_widgets', $sidebars_widgets); 
     1012                if ( is_admin() ) 
     1013                        update_option('sidebars_widgets', $sidebars_widgets); 
    9901014        } 
    9911015 
    9921016        $settings['_multiwidget'] = 1; 
    993         update_option( $option_name, $settings ); 
     1017        if ( is_admin() ) 
     1018                update_option( $option_name, $settings ); 
    9941019 
    9951020        return $settings; 
    9961021}