WordPress.org

Make WordPress Core

Ticket #10300: 10300.8.diff

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

     
    605605                $this->WP_Widget('recent-comments', __('Recent Comments'), $widget_ops); 
    606606                $this->alt_option_name = 'widget_recent_comments'; 
    607607 
    608                 if ( is_active_widget(false, false, $this->id_base) ) 
    609                         add_action( 'wp_head', array(&$this, 'recent_comments_style') ); 
     608                add_action( 'wp_head', array(&$this, 'recent_comments_style') ); 
    610609 
    611610                add_action( 'comment_post', array(&$this, 'flush_widget_cache') ); 
    612611                add_action( 'wp_set_comment_status', array(&$this, 'flush_widget_cache') ); 
    613612        } 
    614613 
    615         function recent_comments_style() { ?> 
     614        function recent_comments_style() { 
     615                if ( !is_active_widget(false, false, $this->id_base) ) 
     616                        return; 
     617        ?> 
    616618        <style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style> 
    617619<?php 
    618620        } 
  • wp-includes/widgets.php

     
    962962        // If loading from front page, consult $_wp_sidebars_widgets rather than options 
    963963        // to see if wp_convert_widget_settings() has made manipulations in memory. 
    964964        if ( is_admin() ) { 
    965                 $sidebars_widgets = get_option('sidebars_widgets', array()); 
     965                $sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
    966966        } else { 
    967967                if ( empty($_wp_sidebars_widgets) ) 
    968                         $sidebars_widgets = get_option('sidebars_widgets', array()); 
    969                 else 
    970                         $sidebars_widgets = &$_wp_sidebars_widgets; 
     968                        $_wp_sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
     969 
     970                $sidebars_widgets = $_wp_sidebars_widgets; 
    971971        } 
    972972        $_sidebars_widgets = array(); 
    973973 
     
    10241024                                        } 
    10251025                                } 
    10261026 
    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; 
     1027                                // move the rest to wp_inactive_widgets 
     1028                                if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 
     1029                                        $_sidebars_widgets['wp_inactive_widgets'] = array(); 
     1030                                 
     1031                                if ( !empty($sidebars_widgets) ) { 
     1032                                        foreach ( $sidebars_widgets as $lost => $val ) { 
     1033                                                if ( is_array($val) ) 
     1034                                                        $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 
     1035                                        } 
     1036                                } 
    10311037 
    1032                                 $_sidebars_widgets['array_version'] = 3; 
    10331038                                $sidebars_widgets = $_sidebars_widgets; 
    10341039                                unset($_sidebars_widgets); 
    10351040                        } 
    10361041 
     1042                        $sidebars_widgets['array_version'] = 3; 
    10371043                        if ( $update && is_admin() ) 
    10381044                                update_option('sidebars_widgets', $sidebars_widgets); 
    10391045        } 
    10401046 
     1047        if ( !is_admin() ) 
     1048                $_wp_sidebars_widgets = $sidebars_widgets; 
     1049         
    10411050        if ( isset($sidebars_widgets['array_version']) ) 
    10421051                unset($sidebars_widgets['array_version']); 
    10431052 
     
    10861095 * @return array 
    10871096 */ 
    10881097function wp_convert_widget_settings($base_name, $option_name, $settings) { 
    1089         global $_wp_sidebars_widgets; 
    10901098        // This test may need expanding. 
    1091         $single = false; 
     1099        $single = $changed = false; 
    10921100        if ( empty($settings) ) { 
    10931101                $single = true; 
    10941102        } else { 
     
    11071115 
    11081116                // If loading from the front page, update sidebar in memory but don't save to options 
    11091117                if ( is_admin() ) { 
    1110                         $sidebars_widgets = get_option('sidebars_widgets'); 
     1118                        $sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
    11111119                } else { 
    11121120                        if ( empty($GLOBALS['_wp_sidebars_widgets']) ) 
    1113                                 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); 
     1121                                $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array('array_version' => 3)); 
    11141122                        $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 
    11151123                } 
    1116  
    1117                 foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 
    1118                         if ( is_array($sidebar) ) { 
    1119                                 foreach ( $sidebar as $i => $name ) { 
    1120                                         if ( $base_name == $name ) { 
    1121                                                 $sidebars_widgets[$index][$i] = "$name-2"; 
    1122                                                 break 2; 
     1124                 
     1125                if ( isset($sidebars_widgets['array_version']) && $sidebars_widgets['array_version'] == 3 ) { 
     1126                        foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 
     1127                                if ( is_array($sidebar) ) { 
     1128                                        foreach ( $sidebar as $i => $name ) { 
     1129                                                if ( $base_name == $name ) { 
     1130                                                        $sidebars_widgets[$index][$i] = "$name-2"; 
     1131                                                        $changed = true; 
     1132                                                        break 2; 
     1133                                                } 
    11231134                                        } 
    11241135                                } 
    11251136                        } 
     1137                         
     1138                        if ( is_admin() && $changed ) 
     1139                                update_option('sidebars_widgets', $sidebars_widgets); 
    11261140                } 
    1127  
    1128                 if ( is_admin() ) 
    1129                         update_option('sidebars_widgets', $sidebars_widgets); 
    11301141        } 
    11311142 
    11321143        $settings['_multiwidget'] = 1;