Ticket #19846: 19846.diff
File 19846.diff, 4.2 KB (added by , 10 years ago) |
---|
-
src/wp-includes/theme.php
675 675 * @param string $stylesheet Stylesheet name 676 676 */ 677 677 function switch_theme( $stylesheet ) { 678 global $wp_theme_directories, $wp_customize, $sidebars_widgets ;678 global $wp_theme_directories, $wp_customize, $sidebars_widgets, $wp_registered_sidebars; 679 679 680 $primary_sidebars = wp_get_primary_widget_areas( $wp_registered_sidebars ); 681 if ( $primary_sidebars && ! empty( $primary_sidebars ) ) { 682 set_transient( 'old_primary_sidebars', $primary_sidebars, MINUTE_IN_SECONDS ); 683 } 684 680 685 $_sidebars_widgets = null; 681 686 if ( 'wp_ajax_customize_save' === current_action() ) { 682 687 $_sidebars_widgets = $wp_customize->post_value( $wp_customize->get_setting( 'old_sidebars_widgets_data' ) ); -
src/wp-includes/widget-functions.php
165 165 'after_widget' => "</li>\n", 166 166 'before_title' => '<h2 class="widgettitle">', 167 167 'after_title' => "</h2>\n", 168 'is_primary' => false, 168 169 ); 169 170 170 171 $sidebar = wp_parse_args( $args, $defaults ); … … 997 998 998 999 $registered_sidebar_keys = array_keys( $wp_registered_sidebars ); 999 1000 $orphaned = 0; 1001 $old_sidebars_widgets = get_theme_mod( 'sidebars_widgets' ); 1002 $old_primary_areas = get_transient( 'old_primary_sidebars' ); 1003 delete_transient( 'old_primary_sidebars' ); 1000 1004 1001 $old_sidebars_widgets = get_theme_mod( 'sidebars_widgets' ); 1005 1002 1006 if ( is_array( $old_sidebars_widgets ) ) { 1003 1007 // time() that sidebars were stored is in $old_sidebars_widgets['time'] 1004 1008 $_sidebars_widgets = $old_sidebars_widgets['data']; … … 1036 1040 1037 1041 unset( $sidebars_widgets['wp_inactive_widgets'] ); 1038 1042 1043 $primary_areas = wp_get_primary_widget_areas( $wp_registered_sidebars ); 1044 $primary_widget = ( $primary_areas && isset( $primary_areas[0] ) ) ? $primary_areas[0] : false; 1045 $old_primary_widget = ( $old_primary_areas && isset( $old_primary_areas[0] ) ) ? $old_primary_areas[0]: false; 1046 1047 if ( $theme_changed ) { 1048 if ( $primary_widget && $old_primary_widget ) { 1049 $_sidebars_widgets[ $primary_widget ] = $sidebars_widgets[ $old_primary_widget ]; 1050 unset( $sidebars_widgets[ $old_primary_widget ] ); 1051 } else if( $primary_widget ) { 1052 //there was no old primary widget area - let's assume the first one should be the primary 1053 $sidebar_keys = array_keys( $sidebars_widgets ); 1054 $first_sidebar = $sidebars_widgets[ $sidebar_keys[0] ]; 1055 $_sidebars_widgets[ $primary_widget ] = $first_sidebar; 1056 unset( $sidebars_widgets[ $sidebar_keys[0] ] ); 1057 } 1058 } 1059 1039 1060 foreach ( $wp_registered_sidebars as $id => $settings ) { 1040 1061 if ( $theme_changed ) { 1041 $_sidebars_widgets[$id] = array_shift( $sidebars_widgets ); 1062 //we've attempted to handle the primary widget area above - now do the others 1063 $_sidebars_widgets[ $id ] = array_shift( $sidebars_widgets ); 1042 1064 } else { 1043 1065 // no theme change, grab only sidebars that are currently registered 1044 if ( isset( $sidebars_widgets[ $id] ) ) {1045 $_sidebars_widgets[ $id] = $sidebars_widgets[$id];1046 unset( $sidebars_widgets[ $id] );1066 if ( isset( $sidebars_widgets[ $id ] ) ) { 1067 $_sidebars_widgets[ $id ] = $sidebars_widgets[ $id ]; 1068 unset( $sidebars_widgets[ $id ] ); 1047 1069 } 1048 1070 } 1049 1071 } 1050 1072 1073 1074 1075 1051 1076 foreach ( $sidebars_widgets as $val ) { 1052 1077 if ( is_array($val) && ! empty( $val ) ) 1053 1078 $_sidebars_widgets['orphaned_widgets_' . ++$orphaned] = $val; … … 1097 1122 } 1098 1123 1099 1124 /** 1125 * Retrieve the list of registered sidebars marked as primary. 1126 * 1127 * @since 4.4.0 1128 * 1129 * @param array $wp_registered_sidebars The list of currently registered sidebars. 1130 * @return array 1131 */ 1132 function wp_get_primary_widget_areas( $wp_registered_sidebars ) { 1133 $primary_list = array(); 1134 foreach( $wp_registered_sidebars as $sidebar_name => $sidebar_details ) { 1135 if ( true === $sidebar_details['is_primary'] ) { 1136 $primary_list[] = $sidebar_name; 1137 } 1138 } 1139 return $primary_list; 1140 } 1141 1142 /** 1100 1143 * Display the RSS entries in a list. 1101 1144 * 1102 1145 * @since 2.5.0