Source
File: wp-includes/widgets.php
function wp_map_sidebars_widgets( $existing_sidebars_widgets ) {
global $wp_registered_sidebars;
$new_sidebars_widgets = array(
'wp_inactive_widgets' => array(),
);
if ( ! is_array( $existing_sidebars_widgets ) || empty( $existing_sidebars_widgets ) ) {
return $new_sidebars_widgets;
}
foreach ( $existing_sidebars_widgets as $sidebar => $widgets ) {
if ( 'wp_inactive_widgets' === $sidebar || 'orphaned_widgets' === substr( $sidebar, 0, 16 ) ) {
$new_sidebars_widgets['wp_inactive_widgets'] = array_merge( $new_sidebars_widgets['wp_inactive_widgets'], (array) $widgets );
unset( $existing_sidebars_widgets[ $sidebar ] );
}
}
if ( 1 === count( $existing_sidebars_widgets ) && 1 === count( $wp_registered_sidebars ) ) {
$new_sidebars_widgets[ key( $wp_registered_sidebars ) ] = array_pop( $existing_sidebars_widgets );
return $new_sidebars_widgets;
}
$existing_sidebars = array_keys( $existing_sidebars_widgets );
foreach ( $wp_registered_sidebars as $sidebar => $name ) {
if ( in_array( $sidebar, $existing_sidebars, true ) ) {
$new_sidebars_widgets[ $sidebar ] = $existing_sidebars_widgets[ $sidebar ];
unset( $existing_sidebars_widgets[ $sidebar ] );
} elseif ( ! array_key_exists( $sidebar, $new_sidebars_widgets ) ) {
$new_sidebars_widgets[ $sidebar ] = array();
}
}
if ( ! empty( $existing_sidebars_widgets ) ) {
$common_slug_groups = array(
array( 'sidebar', 'primary', 'main', 'right' ),
array( 'second', 'left' ),
array( 'sidebar-2', 'footer', 'bottom' ),
array( 'header', 'top' ),
);
foreach ( $common_slug_groups as $slug_group ) {
foreach ( $slug_group as $slug ) {
foreach ( $wp_registered_sidebars as $new_sidebar => $args ) {
if ( false === stripos( $new_sidebar, $slug ) && false === stripos( $slug, $new_sidebar ) ) {
continue;
}
foreach ( $existing_sidebars_widgets as $sidebar => $widgets ) {
foreach ( $slug_group as $slug ) {
if ( false === stripos( $sidebar, $slug ) && false === stripos( $slug, $sidebar ) ) {
continue;
}
if ( ! empty( $existing_sidebars_widgets[ $sidebar ] ) ) {
$new_sidebars_widgets[ $new_sidebar ] = array_merge( $new_sidebars_widgets[ $new_sidebar ], $existing_sidebars_widgets[ $sidebar ] );
unset( $existing_sidebars_widgets[ $sidebar ] );
continue 3;
}
}
}
}
}
}
}
foreach ( $existing_sidebars_widgets as $widgets ) {
if ( is_array( $widgets ) && ! empty( $widgets ) ) {
$new_sidebars_widgets['wp_inactive_widgets'] = array_merge( $new_sidebars_widgets['wp_inactive_widgets'], $widgets );
}
}
$old_sidebars_widgets = get_theme_mod( 'sidebars_widgets' );
$old_sidebars_widgets = isset( $old_sidebars_widgets['data'] ) ? $old_sidebars_widgets['data'] : false;
if ( is_array( $old_sidebars_widgets ) ) {
$old_sidebars_widgets = array_filter( $old_sidebars_widgets );
foreach ( $new_sidebars_widgets as $new_sidebar => $new_widgets ) {
if ( array_key_exists( $new_sidebar, $old_sidebars_widgets ) && ! empty( $new_widgets ) ) {
unset( $old_sidebars_widgets[ $new_sidebar ] );
}
}
foreach ( $old_sidebars_widgets as $sidebar => $widgets ) {
if ( 'orphaned_widgets' === substr( $sidebar, 0, 16 ) ) {
unset( $old_sidebars_widgets[ $sidebar ] );
}
}
$old_sidebars_widgets = _wp_remove_unregistered_widgets( $old_sidebars_widgets );
if ( ! empty( $old_sidebars_widgets ) ) {
foreach ( $old_sidebars_widgets as $old_sidebar => $old_widgets ) {
foreach ( $new_sidebars_widgets as $new_sidebar => $new_widgets ) {
foreach ( $old_widgets as $key => $widget_id ) {
$active_key = array_search( $widget_id, $new_widgets, true );
if ( false !== $active_key ) {
if ( 'wp_inactive_widgets' === $new_sidebar ) {
unset( $new_sidebars_widgets['wp_inactive_widgets'][ $active_key ] );
} else {
unset( $old_sidebars_widgets[ $old_sidebar ][ $key ] );
}
}
}
}
}
}
$new_sidebars_widgets = array_merge( $new_sidebars_widgets, $old_sidebars_widgets );
}
return $new_sidebars_widgets;
}