-wp_enqueue_script('admin-widgets');
-wp_admin_css( 'widgets' );
-
-do_action( 'sidebar_admin_setup' );
-
-$title = __( 'Widgets' );
-$parent_file = 'themes.php';
-
-// register the inactive_widgets area as sidebar
-register_sidebar(array(
- 'name' => __('Inactive Widgets'),
- 'id' => 'wp_inactive_widgets',
- 'before_widget' => '',
- 'after_widget' => '',
- 'before_title' => '',
- 'after_title' => '',
-));
-
-// These are the widgets grouped by sidebar
-$sidebars_widgets = wp_get_sidebars_widgets();
-if ( empty( $sidebars_widgets ) )
- $sidebars_widgets = wp_get_widget_defaults();
-
-// look for "lost" widgets, this has to run at least on each theme change
-function retrieve_widgets() {
- global $wp_registered_widget_updates, $wp_registered_sidebars, $sidebars_widgets, $wp_registered_widgets;
-
- $_sidebars_widgets = array();
- $sidebars = array_keys($wp_registered_sidebars);
-
- unset( $sidebars_widgets['array_version'] );
-
- $old = array_keys($sidebars_widgets);
- sort($old);
- sort($sidebars);
-
- if ( $old == $sidebars )
- return;
-
- // Move the known-good ones first
- foreach ( $sidebars as $id ) {
- if ( array_key_exists( $id, $sidebars_widgets ) ) {
- $_sidebars_widgets[$id] = $sidebars_widgets[$id];
- unset($sidebars_widgets[$id], $sidebars[$id]);
- }
- }
-
- // if new theme has less sidebars than the old theme
- if ( !empty($sidebars_widgets) ) {
- foreach ( $sidebars_widgets as $lost => $val ) {
- if ( is_array($val) )
- $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val );
- }
- }
-
- // discard invalid, theme-specific widgets from sidebars
- $shown_widgets = array();
- foreach ( $_sidebars_widgets as $sidebar => $widgets ) {
- if ( !is_array($widgets) )
- continue;
-
- $_widgets = array();
- foreach ( $widgets as $widget ) {
- if ( isset($wp_registered_widgets[$widget]) )
- $_widgets[] = $widget;
- }
- $_sidebars_widgets[$sidebar] = $_widgets;
- $shown_widgets = array_merge($shown_widgets, $_widgets);
- }