WordPress.org

Make WordPress Core

Ticket #10300: 10300.9.diff

File 10300.9.diff, 9.1 KB (added by Denis-de-Bernardy, 6 years ago)

same as the previous, refreshed against trunk

  • 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

     
    885885function is_active_widget($callback = false, $widget_id = false, $id_base = false, $skip_inactive = true) { 
    886886        global $wp_registered_widgets; 
    887887 
    888         $sidebars_widgets = wp_get_sidebars_widgets(); 
     888        $sidebars_widgets = wp_get_sidebars_widgets(false); 
    889889 
    890890        if ( is_array($sidebars_widgets) ) { 
    891891                foreach ( $sidebars_widgets as $sidebar => $widgets ) { 
     
    935935 */ 
    936936function is_active_sidebar( $index ) { 
    937937        $index = ( is_int($index) ) ? "sidebar-$index" : sanitize_title($index); 
    938         $sidebars_widgets = wp_get_sidebars_widgets(); 
     938        $sidebars_widgets = wp_get_sidebars_widgets(false); 
    939939        if ( isset($sidebars_widgets[$index]) && !empty($sidebars_widgets[$index]) ) 
    940940                return true; 
    941941 
     
    953953 * @since 2.2.0 
    954954 * @access private 
    955955 * 
    956  * @param bool $update Optional, deprecated. 
    957  * @return array Upgraded list of widgets to version 3 array format when called from the admin. 
     956 * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 
     957 * @return array Upgraded list of widgets to version 2 array format. 
    958958 */ 
    959 function wp_get_sidebars_widgets($deprecated = true) { 
     959function wp_get_sidebars_widgets($update = true) { 
    960960        global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 
    961961 
    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. 
    964         if ( !is_admin() ) { 
     964        if ( is_admin() ) { 
     965                $sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
     966        } else { 
    965967                if ( empty($_wp_sidebars_widgets) ) 
    966                         $_wp_sidebars_widgets = get_option('sidebars_widgets', array()); 
     968                        $_wp_sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
    967969 
    968970                $sidebars_widgets = $_wp_sidebars_widgets; 
    969         } else { 
    970                 $sidebars_widgets = get_option('sidebars_widgets', array()); 
    971                 $_sidebars_widgets = array(); 
     971        } 
     972        $_sidebars_widgets = array(); 
    972973 
    973                 if ( isset($sidebars_widgets['wp_inactive_widgets']) ) 
    974                         $sidebars_widgets['array_version'] = 3; 
    975                 elseif ( !isset($sidebars_widgets['array_version']) ) 
    976                         $sidebars_widgets['array_version'] = 1; 
     974        if ( !isset($sidebars_widgets['array_version']) ) 
     975                $sidebars_widgets['array_version'] = 1; 
    977976 
    978                 switch ( $sidebars_widgets['array_version'] ) { 
    979                         case 1 : 
    980                                 foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
    981                                 if ( is_array($sidebar) ) 
    982                                 foreach ( (array) $sidebar as $i => $name ) { 
    983                                         $id = strtolower($name); 
    984                                         if ( isset($wp_registered_widgets[$id]) ) { 
    985                                                 $_sidebars_widgets[$index][$i] = $id; 
    986                                                 continue; 
    987                                         } 
    988                                         $id = sanitize_title($name); 
    989                                         if ( isset($wp_registered_widgets[$id]) ) { 
    990                                                 $_sidebars_widgets[$index][$i] = $id; 
    991                                                 continue; 
    992                                         } 
     977        switch ( $sidebars_widgets['array_version'] ) { 
     978                case 1 : 
     979                        foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
     980                        if ( is_array($sidebar) ) 
     981                        foreach ( (array) $sidebar as $i => $name ) { 
     982                                $id = strtolower($name); 
     983                                if ( isset($wp_registered_widgets[$id]) ) { 
     984                                        $_sidebars_widgets[$index][$i] = $id; 
     985                                        continue; 
     986                                } 
     987                                $id = sanitize_title($name); 
     988                                if ( isset($wp_registered_widgets[$id]) ) { 
     989                                        $_sidebars_widgets[$index][$i] = $id; 
     990                                        continue; 
     991                                } 
    993992 
    994                                         $found = false; 
     993                                $found = false; 
    995994 
    996                                         foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
    997                                                 if ( strtolower($widget['name']) == strtolower($name) ) { 
    998                                                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    999                                                         $found = true; 
    1000                                                         break; 
    1001                                                 } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
    1002                                                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    1003                                                         $found = true; 
    1004                                                         break; 
    1005                                                 } 
     995                                foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
     996                                        if ( strtolower($widget['name']) == strtolower($name) ) { 
     997                                                $_sidebars_widgets[$index][$i] = $widget['id']; 
     998                                                $found = true; 
     999                                                break; 
     1000                                        } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
     1001                                                $_sidebars_widgets[$index][$i] = $widget['id']; 
     1002                                                $found = true; 
     1003                                                break; 
    10061004                                        } 
     1005                                } 
    10071006 
    1008                                         if ( $found ) 
    1009                                                 continue; 
     1007                                if ( $found ) 
     1008                                        continue; 
    10101009 
    1011                                         unset($_sidebars_widgets[$index][$i]); 
     1010                                unset($_sidebars_widgets[$index][$i]); 
     1011                        } 
     1012                        $_sidebars_widgets['array_version'] = 2; 
     1013                        $sidebars_widgets = $_sidebars_widgets; 
     1014                        unset($_sidebars_widgets); 
     1015 
     1016                case 2 : 
     1017                        $sidebars = array_keys( $wp_registered_sidebars ); 
     1018                        if ( !empty( $sidebars ) ) { 
     1019                                // Move the known-good ones first 
     1020                                foreach ( (array) $sidebars as $id ) { 
     1021                                        if ( array_key_exists( $id, $sidebars_widgets ) ) { 
     1022                                                $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 
     1023                                                unset($sidebars_widgets[$id], $sidebars[$id]); 
     1024                                        } 
    10121025                                } 
    1013                                 $_sidebars_widgets['array_version'] = 2; 
    1014                                 $sidebars_widgets = $_sidebars_widgets; 
    1015                                 unset($_sidebars_widgets); 
    10161026 
    1017                         case 2 : 
    1018                                 $sidebars = array_keys( $wp_registered_sidebars ); 
    1019                                 if ( !empty( $sidebars ) ) { 
    1020                                         // Move the known-good ones first 
    1021                                         foreach ( (array) $sidebars as $id ) { 
    1022                                                 if ( array_key_exists( $id, $sidebars_widgets ) ) { 
    1023                                                         $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 
    1024                                                         unset($sidebars_widgets[$id], $sidebars[$id]); 
    1025                                                 } 
     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 ); 
    10261035                                        } 
     1036                                } 
    10271037 
    1028                                         // move the rest to wp_inactive_widgets 
    1029                                         if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 
    1030                                                 $_sidebars_widgets['wp_inactive_widgets'] = array(); 
     1038                                $sidebars_widgets = $_sidebars_widgets; 
     1039                                unset($_sidebars_widgets); 
     1040                        } 
    10311041 
    1032                                         if ( !empty($sidebars_widgets) ) { 
    1033                                                 foreach ( $sidebars_widgets as $lost => $val ) { 
    1034                                                         if ( is_array($val) ) 
    1035                                                                 $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 
    1036                                                 } 
    1037                                         } 
    1038  
    1039                                         $sidebars_widgets = $_sidebars_widgets; 
    1040                                         unset($_sidebars_widgets); 
    1041                                 } 
    1042                 } 
     1042                        $sidebars_widgets['array_version'] = 3; 
     1043                        if ( $update && is_admin() ) 
     1044                                update_option('sidebars_widgets', $sidebars_widgets); 
    10431045        } 
    10441046 
     1047        if ( !is_admin() ) 
     1048                $_wp_sidebars_widgets = $sidebars_widgets; 
     1049         
    10451050        if ( isset($sidebars_widgets['array_version']) ) 
    10461051                unset($sidebars_widgets['array_version']); 
    10471052 
     
    11101115 
    11111116                // If loading from the front page, update sidebar in memory but don't save to options 
    11121117                if ( is_admin() ) { 
    1113                         $sidebars_widgets = get_option('sidebars_widgets'); 
     1118                        $sidebars_widgets = get_option('sidebars_widgets', array('array_version' => 3)); 
    11141119                } else { 
    11151120                        if ( empty($GLOBALS['_wp_sidebars_widgets']) ) 
    1116                                 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array()); 
     1121                                $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array('array_version' => 3)); 
    11171122                        $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 
    11181123                } 
    1119  
    1120                 foreach ( (array) $sidebars_widgets as $index => $sidebar ) { 
    1121                         if ( is_array($sidebar) ) { 
    1122                                 foreach ( $sidebar as $i => $name ) { 
    1123                                         if ( $base_name == $name ) { 
    1124                                                 $sidebars_widgets[$index][$i] = "$name-2"; 
    1125                                                 $changed = true; 
    1126                                                 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                                                } 
    11271134                                        } 
    11281135                                } 
    11291136                        } 
     1137                         
     1138                        if ( is_admin() && $changed ) 
     1139                                update_option('sidebars_widgets', $sidebars_widgets); 
    11301140                } 
    1131  
    1132                 if ( is_admin() && $changed ) 
    1133                         update_option('sidebars_widgets', $sidebars_widgets); 
    11341141        } 
    11351142 
    11361143        $settings['_multiwidget'] = 1;