<?php
/**
- * Widgets administration panel.
+ * Widget administration panel
*
* @package WordPress
* @subpackage Administration
/** WordPress Administration Widgets API */
require_once(ABSPATH . 'wp-admin/includes/widgets.php');
-if ( ! current_user_can('edit_theme_options') )
- wp_die( __( 'Cheatin’ uh?' ));
+if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_die(
+ '<h1>' . __( 'Cheatin’ uh?' ) . '</h1>' .
+ '<p>' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '</p>',
+ 403
+ );
+}
$widgets_access = get_user_setting( 'widgets_access' );
if ( isset($_GET['widgets-access']) ) {
set_user_setting( 'widgets_access', $widgets_access );
}
-function wp_widgets_access_body_class($classes) {
- return "$classes widgets_access ";
-}
-
if ( 'on' == $widgets_access ) {
add_filter( 'admin_body_class', 'wp_widgets_access_body_class' );
} else {
}
/**
- * Fires early before the Widgets administration screen loads, after scripts are enqueued.
+ * Fires early before the Widgets administration screen loads,
+ * after scripts are enqueued.
*
* @since 2.2.0
*/
get_current_screen()->set_help_sidebar(
'<p><strong>' . __('For more information:') . '</strong></p>' .
- '<p>' . __('<a href="http://codex.wordpress.org/Appearance_Widgets_Screen" target="_blank">Documentation on Widgets</a>') . '</p>' .
- '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
+ '<p>' . __('<a href="https://codex.wordpress.org/Appearance_Widgets_Screen" target="_blank">Documentation on Widgets</a>') . '</p>' .
+ '<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
if ( ! current_theme_supports( 'widgets' ) ) {
- wp_die( __( 'The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please <a href="http://codex.wordpress.org/Widgetizing_Themes">follow these instructions</a>.' ) );
+ wp_die( __( 'The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please <a href="https://codex.wordpress.org/Widgetizing_Themes">follow these instructions</a>.' ) );
}
// These are the widgets grouped by sidebar
if ( 'wp_inactive_widgets' == $sidebar_id )
continue;
- if ( !isset( $wp_registered_sidebars[ $sidebar_id ] ) ) {
+ if ( ! is_registered_sidebar( $sidebar_id ) ) {
if ( ! empty( $widgets ) ) { // register the inactive_widgets area as sidebar
register_sidebar(array(
'name' => __( 'Inactive Sidebar (not used)' ),
$id_base = $_POST['id_base'];
$sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array();
- // delete
+ // Delete.
if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) {
if ( !in_array($widget_id, $sidebar, true) ) {
$sidebar = array_diff( $sidebar, array($widget_id) );
$_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1');
+
+ /**
+ * Fires immediately after a widget has been marked for deletion.
+ *
+ * @since 4.4.0
+ *
+ * @param string $widget_id ID of the widget marked for deletion.
+ * @param string $sidebar_id ID of the sidebar the widget was deleted from.
+ * @param string $id_base ID base for the widget.
+ */
+ do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base );
}
$_POST['widget-id'] = $sidebar;
$sidebars_widgets[$sidebar_id] = $sidebar;
- // remove old position
+ // Remove old position.
if ( !isset($_POST['delete_widget']) ) {
foreach ( $sidebars_widgets as $key => $sb ) {
if ( is_array($sb) )
exit;
}
+// Remove inactive widgets without js
+if ( isset( $_POST['removeinactivewidgets'] ) ) {
+ check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' );
+
+ if ( $_POST['removeinactivewidgets'] ) {
+ foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
+ $pieces = explode( '-', $widget_id );
+ $multi_number = array_pop( $pieces );
+ $id_base = implode( '-', $pieces );
+ $widget = get_option( 'widget_' . $id_base );
+ unset( $widget[$multi_number] );
+ update_option( 'widget_' . $id_base, $widget );
+ unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
+ }
+
+ wp_set_sidebars_widgets( $sidebars_widgets );
+ }
+
+ wp_redirect( admin_url( '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
$keys = array_keys( $wp_registered_sidebars );
- $sidebar = array_shift( $keys );
+ $sidebar = reset( $keys );
if ( isset($_GET['base']) && isset($_GET['num']) ) { // multi-widget
// Copy minimal info from an existing instance of this widget to a new instance
$id_base = isset($control['id_base']) ? $control['id_base'] : $control['id'];
- // show the widget form
+ // Show the widget form.
$width = ' style="width:' . max($control['width'], 350) . 'px"';
$key = isset($_GET['key']) ? (int) $_GET['key'] : 0;
require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?>
<div class="wrap">
- <?php screen_icon(); ?>
- <h2><?php echo esc_html( $title ); ?></h2>
+ <h1><?php echo esc_html( $title ); ?></h1>
<div class="editwidget"<?php echo $width; ?>>
- <h3><?php printf( __( 'Widget %s' ), $name ); ?></h3>
+ <h2><?php printf( __( 'Widget %s' ), $name ); ?></h2>
<form action="widgets.php" method="post">
<div class="widget-inside">
require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?>
<div class="wrap">
-<?php screen_icon(); ?>
-<h2><?php echo esc_html( $title ); ?></h2>
+<h1>
+<?php
+ echo esc_html( $title );
+ if ( current_user_can( 'customize' ) ) {
+ printf(
+ ' <a class="page-title-action hide-if-no-customize" href="%1$s">%2$s</a>',
+ esc_url( add_query_arg(
+ array(
+ array( 'autofocus' => array( 'panel' => 'widgets' ) ),
+ 'return' => urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) )
+ ),
+ admin_url( 'customize.php' )
+ ) ),
+ __( 'Manage with Live Preview' )
+ );
+ }
+?>
+</h1>
<?php if ( isset($_GET['message']) && isset($messages[$_GET['message']]) ) { ?>
-<div id="message" class="updated"><p><?php echo $messages[$_GET['message']]; ?></p></div>
+<div id="message" class="updated notice is-dismissible"><p><?php echo $messages[$_GET['message']]; ?></p></div>
<?php } ?>
<?php if ( isset($_GET['error']) && isset($errors[$_GET['error']]) ) { ?>
<div id="message" class="error"><p><?php echo $errors[$_GET['error']]; ?></p></div>
<div id="widgets-left">
<div id="available-widgets" class="widgets-holder-wrap">
<div class="sidebar-name">
- <div class="sidebar-name-arrow"><br /></div>
- <h3><?php _e('Available Widgets'); ?> <span id="removing-widget"><?php _ex('Deactivate', 'removing-widget'); ?> <span></span></span></h3></div>
- <div class="widget-holder">
- <p class="description"><?php _e('Drag widgets from here to a sidebar on the right to activate them. Drag widgets back here to deactivate them and delete their settings.'); ?></p>
- <div id="widget-list">
- <?php wp_list_widgets(); ?>
+ <div class="sidebar-name-arrow"><br /></div>
+ <h2><?php _e( 'Available Widgets' ); ?> <span id="removing-widget"><?php _ex( 'Deactivate', 'removing-widget' ); ?> <span></span></span></h2>
</div>
- <br class='clear' />
+ <div class="widget-holder">
+ <div class="sidebar-description">
+ <p class="description"><?php _e('To activate a widget drag it to a sidebar or click on it. To deactivate a widget and delete its settings, drag it back.'); ?></p>
+ </div>
+ <div id="widget-list">
+ <?php wp_list_widgets(); ?>
+ </div>
+ <br class='clear' />
</div>
<br class="clear" />
</div>
<?php
+
+$theme_sidebars = array();
foreach ( $wp_registered_sidebars as $sidebar => $registered_sidebar ) {
if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) ) {
$wrap_class = 'widgets-holder-wrap';
if ( !empty( $registered_sidebar['class'] ) )
$wrap_class .= ' ' . $registered_sidebar['class'];
-?>
-
+ $is_inactive_widgets = 'wp_inactive_widgets' == $registered_sidebar['id'];
+ ?>
<div class="<?php echo esc_attr( $wrap_class ); ?>">
- <div class="sidebar-name">
- <div class="sidebar-name-arrow"><br /></div>
- <h3><?php echo esc_html( $registered_sidebar['name'] ); ?>
- <span class="spinner"></span>
- </h3>
- </div>
<div class="widget-holder inactive">
- <?php wp_list_widget_controls( $registered_sidebar['id'] ); ?>
- <div class="clear"></div>
+ <?php wp_list_widget_controls( $registered_sidebar['id'], $registered_sidebar['name'] ); ?>
+
+ <?php if ( $is_inactive_widgets ) { ?>
+ <div class="remove-inactive-widgets">
+ <form action="" method="post">
+ <p>
+ <?php
+ $attributes = array( 'id' => 'inactive-widgets-control-remove' );
+
+ if ( empty($sidebars_widgets['wp_inactive_widgets']) ) {
+ $attributes['disabled'] = '';
+ }
+
+ submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes );
+ ?>
+ <span class="spinner"></span>
+ </p>
+ <?php wp_nonce_field( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' ); ?>
+ </form>
+ </div>
+ <?php } ?>
</div>
+ <?php if ( $is_inactive_widgets ) { ?>
+ <p class="description"><?php _e( 'This will clear all items from the inactive widgets list. You will not be able to restore any customizations.' ); ?></p>
+ <?php } ?>
</div>
-<?php
+ <?php
+
+ } else {
+ $theme_sidebars[$sidebar] = $registered_sidebar;
}
}
-?>
+?>
</div>
</div>
+<?php
+
+$i = $split = 0;
+$single_sidebar_class = '';
+$sidebars_count = count( $theme_sidebars );
+if ( $sidebars_count > 1 ) {
+ $split = ceil( $sidebars_count / 2 );
+} else {
+ $single_sidebar_class = ' single-sidebar';
+}
+
+?>
<div class="widget-liquid-right">
-<div id="widgets-right">
+<div id="widgets-right" class="wp-clearfix<?php echo $single_sidebar_class; ?>">
+<div class="sidebars-column-1">
<?php
-$i = 0;
-foreach ( $wp_registered_sidebars as $sidebar => $registered_sidebar ) {
- if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) )
- continue;
+foreach ( $theme_sidebars as $sidebar => $registered_sidebar ) {
$wrap_class = 'widgets-holder-wrap';
if ( !empty( $registered_sidebar['class'] ) )
$wrap_class .= ' sidebar-' . $registered_sidebar['class'];
- if ( $i )
- $wrap_class .= ' closed'; ?>
+ if ( $i > 0 )
+ $wrap_class .= ' closed';
+ if ( $split && $i == $split ) {
+ ?>
+ </div><div class="sidebars-column-2">
+ <?php
+ }
+
+ ?>
<div class="<?php echo esc_attr( $wrap_class ); ?>">
- <div class="sidebar-name">
- <div class="sidebar-name-arrow"><br /></div>
- <h3><?php echo esc_html( $registered_sidebar['name'] ); ?>
- <span class="spinner"></span></h3></div>
- <?php wp_list_widget_controls( $sidebar ); // Show the control forms for each of the widgets in this sidebar ?>
+ <?php wp_list_widget_controls( $sidebar, $registered_sidebar['name'] ); // Show the control forms for each of the widgets in this sidebar ?>
</div>
-<?php
+ <?php
+
$i++;
-} ?>
+}
+
+?>
+</div>
</div>
</div>
-<form action="" method="post">
+<form method="post">
<?php wp_nonce_field( 'save-sidebar-widgets', '_wpnonce_widgets', false ); ?>
</form>
<br class="clear" />
</div>
+<div class="widgets-chooser">
+ <ul class="widgets-chooser-sidebars"></ul>
+ <div class="widgets-chooser-actions">
+ <button class="button-secondary"><?php _e( 'Cancel' ); ?></button>
+ <button class="button-primary"><?php _e( 'Add Widget' ); ?></button>
+ </div>
+</div>
+
<?php
/**