WordPress.org

Make WordPress Core

Ticket #9629: 9629.diff

File 9629.diff, 2.6 KB (added by ryan, 9 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}