' . __('Widgets are added and arranged by simple drag ’n’ drop. If you hover your mouse over the titlebar of a widget, you’ll see a 4-arrow cursor which indicates that the widget is movable. Click on the titlebar, hold down the mouse button and drag the widget to a sidebar. As you drag, you’ll see a dotted box that also moves. This box shows where the widget will go once you drop it.') . '

' . __('To remove a widget from a sidebar, drag it back to Available Widgets or click on the arrow on its titlebar to reveal its settings, and then click Remove.') . '

' . __('To remove a widget from a sidebar and keep its configuration, drag it to Inactive Widgets.') . '

' . __('The Inactive Widgets area stores widgets that are configured but not curently used. If you change themes and the new theme has fewer sidebars than the old, all extra widgets will be stored to Inactive Widgets automatically.') . '

'; add_contextual_help($current_screen, $help); // register the inactive_widgets area as sidebar register_sidebar(array( 'name' => __('Inactive Widgets'), 'id' => 'wp_inactive_widgets', 'description' => '', '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); } $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets, $_widgets); // find hidden/lost multi-widget instances $lost_widgets = array(); foreach ( $wp_registered_widgets as $key => $val ) { if ( in_array($key, $shown_widgets, true) ) continue; $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key); if ( 2 > (int) $number ) continue; $lost_widgets[] = $key; } $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']); wp_set_sidebars_widgets($sidebars_widgets); } retrieve_widgets(); if ( count($wp_registered_sidebars) == 1 ) { // If only "wp_inactive_widgets" is defined the theme has no sidebars, die. require_once( 'admin-header.php' ); ?>

follow these instructions.' ); ?>

$val ) { if ( is_array($val) && preg_match('/__i__|%i%/', key($val)) ) { $_POST[$key] = array( $number => array_shift($val) ); break; } } } $sidebar_id = $_POST['sidebar']; $position = isset($_POST[$sidebar_id . '_position']) ? (int) $_POST[$sidebar_id . '_position'] - 1 : 0; $id_base = $_POST['id_base']; $sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array(); // delete if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) { if ( !in_array($widget_id, $sidebar, true) ) { wp_redirect('widgets.php?error=0'); exit; } $sidebar = array_diff( $sidebar, array($widget_id) ); $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); } $_POST['widget-id'] = $sidebar; foreach ( (array) $wp_registered_widget_updates as $name => $control ) { if ( $name != $id_base || !is_callable($control['callback']) ) continue; ob_start(); call_user_func_array( $control['callback'], $control['params'] ); ob_end_clean(); break; } $sidebars_widgets[$sidebar_id] = $sidebar; // remove old position if ( !isset($_POST['delete_widget']) ) { foreach ( $sidebars_widgets as $key => $sb ) { if ( is_array($sb) ) $sidebars_widgets[$key] = array_diff( $sb, array($widget_id) ); } array_splice( $sidebars_widgets[$sidebar_id], $position, 0, $widget_id ); } wp_set_sidebars_widgets($sidebars_widgets); wp_redirect('widgets.php?message=0'); exit; } // Output the widget form without js if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) { $widget_id = $_GET['editwidget']; if ( isset($_GET['addnew']) ) { // Default to the first sidebar $sidebar = array_shift( $keys = array_keys($wp_registered_sidebars) ); if ( isset($_GET['base']) && isset($_GET['num']) ) { // multi-widget // Copy minimal info from an existing instance of this widget to a new instance foreach ( $wp_registered_widget_controls as $control ) { if ( $_GET['base'] === $control['id_base'] ) { $control_callback = $control['callback']; $multi_number = (int) $_GET['num']; $control['params'][0]['number'] = -1; $widget_id = $control['id'] = $control['id_base'] . '-' . $multi_number; $wp_registered_widget_controls[$control['id']] = $control; break; } } } } if ( isset($wp_registered_widget_controls[$widget_id]) && !isset($control) ) { $control = $wp_registered_widget_controls[$widget_id]; $control_callback = $control['callback']; } elseif ( !isset($wp_registered_widget_controls[$widget_id]) && isset($wp_registered_widgets[$widget_id]) ) { $name = esc_html( strip_tags($wp_registered_widgets[$widget_id]['name']) ); } if ( !isset($name) ) $name = esc_html( strip_tags($control['name']) ); if ( !isset($sidebar) ) $sidebar = isset($_GET['sidebar']) ? $_GET['sidebar'] : 'wp_inactive_widgets'; if ( !isset($multi_number) ) $multi_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id']; // show the widget form $width = ' style="width:' . max($control['width'], 350) . 'px"'; $key = isset($_GET['key']) ? (int) $_GET['key'] : 0; require_once( 'admin-header.php' ); ?>

>

' . __('There are no options for this widget.') . "

\n"; ?>

$sbvalue ) { echo "\t\t\n"; } ?>
"; if ( 'wp_inactive_widgets' == $sbname ) { echo ' '; } else { if ( !isset($sidebars_widgets[$sbname]) || !is_array($sidebars_widgets[$sbname]) ) { $j = 1; $sidebars_widgets[$sbname] = array(); } else { $j = count($sidebars_widgets[$sbname]); if ( isset($_GET['addnew']) || !in_array($widget_id, $sidebars_widgets[$sbname], true) ) $j++; } $selected = ''; echo "\t\t\n"; } echo "




$registered_sidebar ) { if ( 'wp_inactive_widgets' == $sidebar ) continue; $closed = $i ? ' closed' : ''; ?>