WordPress.org

Make WordPress Core

Ticket #17979: 17979.12.diff

File 17979.12.diff, 1.9 KB (added by aaroncampbell, 3 years ago)

Use theme mods instead of transients

  • wp-includes/theme.php

     
    12461246 * @param string $stylesheet Stylesheet name. 
    12471247 */ 
    12481248function switch_theme($template, $stylesheet) { 
    1249         global $wp_theme_directories; 
     1249        global $wp_theme_directories, $sidebars_widgets; 
    12501250 
     1251        if ( ! is_array( $sidebars_widgets ) ) 
     1252                $sidebars_widgets = wp_get_sidebars_widgets(); 
     1253        set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $sidebars_widgets ) ); 
     1254 
    12511255        $old_theme = get_current_theme(); 
    12521256 
    12531257        update_option('template', $template); 
  • wp-includes/widgets.php

     
    12011201                if ( ! is_array( $sidebars_widgets ) ) 
    12021202                        $sidebars_widgets = wp_get_sidebars_widgets(); 
    12031203 
    1204                 $key = md5( $old_theme ); 
    1205                 // Store widgets for 1 week so we can restore if needed 
    1206                 set_transient( 'old_widgets_' . $key, $sidebars_widgets, 604800 ); 
    1207  
    12081204                retrieve_widgets(); 
    12091205                update_option( 'theme_switched', false ); 
    12101206        } 
     
    12141210function retrieve_widgets() { 
    12151211        global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets; 
    12161212 
    1217         $key = md5( get_current_theme() ); 
    1218         if ( false !== ( $_sidebars_widgets = get_transient( "old_widgets_{$key}" ) ) ) { 
    1219                 delete_transient( "old_widgets_{$key}" ); 
     1213        $old_sidebars_widgets = get_theme_mod( 'sidebars_widgets' ); 
     1214        if ( is_array( $old_sidebars_widgets ) ) { 
     1215                // time() that sidebars were stored is in $old_sidebars_widgets['time'] 
     1216                $_sidebars_widgets = $old_sidebars_widgets['data']; 
     1217                remove_theme_mod( 'sidebars_widgets' ); 
    12201218        } else { 
    12211219                if ( ! is_array( $sidebars_widgets ) ) 
    12221220                        $sidebars_widgets = wp_get_sidebars_widgets();