2007-04-24 03:05:17 +02:00
< ? php
2008-08-16 09:27:34 +02:00
/**
* Widgets administration panel .
*
* @ package WordPress
* @ subpackage Administration
*/
2007-04-24 03:05:17 +02:00
2008-08-16 09:27:34 +02:00
/** WordPress Administration Bootstrap */
2010-04-18 08:14:45 +02:00
require_once ( './admin.php' );
2008-08-16 09:27:34 +02:00
/** WordPress Administration Widgets API */
2008-02-07 22:57:54 +01:00
require_once ( ABSPATH . 'wp-admin/includes/widgets.php' );
2007-04-24 03:05:17 +02:00
2010-05-12 21:19:57 +02:00
if ( ! current_user_can ( 'edit_theme_options' ) )
2007-05-04 19:52:22 +02:00
wp_die ( __ ( 'Cheatin’ uh?' ));
2009-08-18 11:53:37 +02:00
$widgets_access = get_user_setting ( 'widgets_access' );
if ( isset ( $_GET [ 'widgets-access' ]) ) {
$widgets_access = 'on' == $_GET [ 'widgets-access' ] ? 'on' : 'off' ;
set_user_setting ( 'widgets_access' , $widgets_access );
}
2011-10-05 09:09:51 +02:00
function wp_widgets_access_body_class ( $classes ) {
return " $classes widgets_access " ;
}
2009-08-18 11:53:37 +02:00
if ( 'on' == $widgets_access )
2011-10-05 09:09:51 +02:00
add_filter ( 'admin_body_class' , 'wp_widgets_access_body_class' );
2009-08-18 11:53:37 +02:00
else
wp_enqueue_script ( 'admin-widgets' );
2008-01-05 00:34:33 +01:00
do_action ( 'sidebar_admin_setup' );
2007-06-14 04:25:30 +02:00
2008-01-05 00:34:33 +01:00
$title = __ ( 'Widgets' );
$parent_file = 'themes.php' ;
2007-06-14 04:25:30 +02:00
2011-10-07 06:57:12 +02:00
$help = '
< p > ' . __(' Widgets are independent sections of content that can be placed into any widgetized area provided by your theme ( commonly called sidebars ) . To populate your sidebars / widget areas with individual widgets , drag and drop the title bars into the desired area . By default , only the first widget area is expanded . To populate additional widget areas , click on their title bars to expand them . ') . ' </ p >
< p > ' . __(' The Available Widgets section contains all the widgets you can choose from . Once you drag a widget into a sidebar , it will open to allow you to configure its settings . When you are happy with the widget settings , click the Save button and the widget will go live on your site . If you click Delete , it will remove the widget . ') . ' </ p >
< p > ' . __(' If you want to remove the widget but save its setting for possible future use , just drag it into the Inactive Widgets area . You can add them back anytime from there . This is especially helpful when you switch to a theme with fewer or different widget areas . ') . ' </ p >
< p > ' . __(' Widgets may be used multiple times . You can give each widget a title , to display on your site , but it & #8217;s not required.') . '</p>
< p > ' . __(' Enabling Accessibility Mode , via Screen Options , allows you to use Add and Edit buttons instead of using drag and drop . ') . ' </ p >
< p > ' . __(' Many themes show some sidebar widgets by default until you edit your sidebars , but they are not automatically displayed in your sidebar management tool . After you make your first widget change , you can re - add the default widgets by adding them from the Available Widgets area . ') . ' </ p >
' ;
2011-11-02 04:12:37 +01:00
2011-10-07 06:57:12 +02:00
add_contextual_help ( $current_screen , $help );
2010-01-15 17:58:36 +01:00
2011-11-02 21:14:10 +01:00
get_current_screen () -> set_help_sidebar (
2011-11-02 04:12:37 +01:00
'<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>'
);
2011-09-03 00:13:55 +02:00
// These are the widgets grouped by sidebar
$sidebars_widgets = wp_get_sidebars_widgets ();
if ( empty ( $sidebars_widgets ) )
$sidebars_widgets = wp_get_widget_defaults ();
foreach ( $sidebars_widgets as $sidebar_id => $widgets ) {
2011-09-03 05:01:11 +02:00
if ( 'wp_inactive_widgets' == $sidebar_id )
continue ;
2011-11-18 08:00:26 +01:00
if ( ! isset ( $wp_registered_sidebars [ $sidebar_id ] ) ) {
if ( ! empty ( $widgets ) ) { // register the inactive_widgets area as sidebar
register_sidebar ( array (
'name' => __ ( 'Inactive Sidebar (from previous theme)' ),
'id' => $sidebar_id ,
'class' => 'inactive-sidebar orphan-sidebar' ,
'description' => __ ( 'This is a left over sidebar from an old theme and does not show anywhere on your site' ),
'before_widget' => '' ,
'after_widget' => '' ,
'before_title' => '' ,
'after_title' => '' ,
));
} else {
unset ( $sidebars_widgets [ $sidebar_id ] );
}
2009-04-14 03:17:57 +02:00
}
2007-04-24 03:05:17 +02:00
}
2011-09-03 00:13:55 +02:00
2011-09-03 05:01:11 +02:00
// register the inactive_widgets area as sidebar
register_sidebar ( array (
'name' => __ ( 'Inactive Widgets' ),
'id' => 'wp_inactive_widgets' ,
'class' => 'inactive-sidebar' ,
'description' => 'Drag widgets here to remove them from the sidebar but keep their settings.' ,
'before_widget' => '' ,
'after_widget' => '' ,
'before_title' => '' ,
'after_title' => '' ,
));
2009-04-11 16:37:24 +02:00
retrieve_widgets ();
2007-04-24 03:05:17 +02:00
2009-04-11 16:37:24 +02:00
if ( count ( $wp_registered_sidebars ) == 1 ) {
2009-04-20 12:58:50 +02:00
// If only "wp_inactive_widgets" is defined the theme has no sidebars, die.
2010-04-18 08:14:45 +02:00
require_once ( './admin-header.php' );
2009-04-11 16:37:24 +02:00
?>
2007-06-14 04:25:30 +02:00
2009-04-11 16:37:24 +02:00
< div class = " wrap " >
< ? php screen_icon (); ?>
2009-05-18 17:11:07 +02:00
< h2 >< ? php echo esc_html ( $title ); ?> </h2>
2009-04-11 16:37:24 +02:00
< div class = " error " >
< p >< ? php _e ( 'No Sidebars Defined' ); ?> </p>
</ div >
< p >< ? php _e ( '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>.' ); ?> </p>
</ div >
2007-06-14 04:25:30 +02:00
2009-04-11 16:37:24 +02:00
< ? php
2010-04-18 08:14:45 +02:00
require_once ( './admin-footer.php' );
2009-04-11 16:37:24 +02:00
exit ;
}
2007-06-14 04:25:30 +02:00
2009-04-20 12:58:50 +02:00
// We're saving a widget without js
if ( isset ( $_POST [ 'savewidget' ]) || isset ( $_POST [ 'removewidget' ]) ) {
$widget_id = $_POST [ 'widget-id' ];
check_admin_referer ( " save-delete-widget- $widget_id " );
2009-05-22 14:08:51 +02:00
$number = isset ( $_POST [ 'multi_number' ]) ? ( int ) $_POST [ 'multi_number' ] : '' ;
if ( $number ) {
foreach ( $_POST as $key => $val ) {
if ( is_array ( $val ) && preg_match ( '/__i__|%i%/' , key ( $val )) ) {
$_POST [ $key ] = array ( $number => array_shift ( $val ) );
break ;
}
}
}
$sidebar_id = $_POST [ 'sidebar' ];
2009-04-20 12:58:50 +02:00
$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' ] ) {
2009-05-22 14:08:51 +02:00
if ( ! in_array ( $widget_id , $sidebar , true ) ) {
2010-10-27 12:43:43 +02:00
wp_redirect ( admin_url ( 'widgets.php?error=0' ) );
2009-04-20 12:58:50 +02:00
exit ;
}
2009-05-22 14:08:51 +02:00
$sidebar = array_diff ( $sidebar , array ( $widget_id ) );
$_POST = array ( 'sidebar' => $sidebar_id , 'widget-' . $id_base => array (), 'the-widget-id' => $widget_id , 'delete_widget' => '1' );
}
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
$_POST [ 'widget-id' ] = $sidebar ;
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
foreach ( ( array ) $wp_registered_widget_updates as $name => $control ) {
if ( $name != $id_base || ! is_callable ( $control [ 'callback' ]) )
continue ;
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
ob_start ();
call_user_func_array ( $control [ 'callback' ], $control [ 'params' ] );
ob_end_clean ();
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
break ;
}
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
$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 ) );
2009-04-20 12:58:50 +02:00
}
2009-05-22 14:08:51 +02:00
array_splice ( $sidebars_widgets [ $sidebar_id ], $position , 0 , $widget_id );
2009-04-20 12:58:50 +02:00
}
wp_set_sidebars_widgets ( $sidebars_widgets );
2010-10-27 12:43:43 +02:00
wp_redirect ( admin_url ( 'widgets.php?message=0' ) );
2009-04-20 12:58:50 +02:00
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' ];
2009-05-22 14:08:51 +02:00
$control [ 'params' ][ 0 ][ 'number' ] = - 1 ;
$widget_id = $control [ 'id' ] = $control [ 'id_base' ] . '-' . $multi_number ;
2009-04-20 12:58:50 +02:00
$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' ];
2009-05-22 14:08:51 +02:00
} 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' ]) );
2009-04-20 12:58:50 +02:00
}
2009-05-22 14:08:51 +02:00
if ( ! isset ( $name ) )
$name = esc_html ( strip_tags ( $control [ 'name' ]) );
2009-05-25 01:47:49 +02:00
2009-04-20 12:58:50 +02:00
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
2009-05-22 14:08:51 +02:00
$width = ' style="width:' . max ( $control [ 'width' ], 350 ) . 'px"' ;
$key = isset ( $_GET [ 'key' ]) ? ( int ) $_GET [ 'key' ] : 0 ;
2009-04-20 12:58:50 +02:00
2010-04-18 08:14:45 +02:00
require_once ( './admin-header.php' ); ?>
2009-05-22 14:08:51 +02:00
< div class = " wrap " >
< ? php screen_icon (); ?>
< h2 >< ? php echo esc_html ( $title ); ?> </h2>
< div class = " editwidget " < ? php echo $width ; ?> >
< h3 >< ? php printf ( __ ( 'Widget %s' ), $name ); ?> </h3>
< form action = " widgets.php " method = " post " >
< div class = " widget-inside " >
2009-05-25 01:47:49 +02:00
< ? php
2009-05-22 14:08:51 +02:00
if ( is_callable ( $control_callback ) )
call_user_func_array ( $control_callback , $control [ 'params' ] );
else
echo '<p>' . __ ( 'There are no options for this widget.' ) . " </p> \n " ; ?>
</ div >
< p class = " describe " >< ? php _e ( 'Select both the sidebar for this widget and the position of the widget in that sidebar.' ); ?> </p>
< div class = " widget-position " >
< table class = " widefat " >< thead >< tr >< th >< ? php _e ( 'Sidebar' ); ?> </th><th><?php _e('Position'); ?></th></tr></thead><tbody>
2009-08-16 03:56:21 +02:00
< ? php
foreach ( $wp_registered_sidebars as $sbname => $sbvalue ) {
2009-05-22 14:08:51 +02:00
echo " \t \t <tr><td><label><input type='radio' name='sidebar' value=' " . esc_attr ( $sbname ) . " ' " . checked ( $sbname , $sidebar , false ) . " /> $sbvalue[name] </label></td><td> " ;
2011-09-03 05:01:11 +02:00
if ( 'wp_inactive_widgets' == $sbname || 'orphaned_widgets' == substr ( $sbname , 0 , 16 ) ) {
2009-05-22 14:08:51 +02:00
echo ' ' ;
} else {
if ( ! isset ( $sidebars_widgets [ $sbname ]) || ! is_array ( $sidebars_widgets [ $sbname ]) ) {
$j = 1 ;
2009-08-16 03:56:21 +02:00
$sidebars_widgets [ $sbname ] = array ();
2009-04-20 12:58:50 +02:00
} else {
2009-05-22 14:08:51 +02:00
$j = count ( $sidebars_widgets [ $sbname ]);
if ( isset ( $_GET [ 'addnew' ]) || ! in_array ( $widget_id , $sidebars_widgets [ $sbname ], true ) )
$j ++ ;
2009-04-20 12:58:50 +02:00
}
2009-05-22 14:08:51 +02:00
$selected = '' ;
echo " \t \t <select name=' { $sbname } _position'> \n " ;
2010-01-21 22:37:43 +01:00
echo " \t \t <option value=''> " . __ ( '— Select —' ) . " </option> \n " ;
2009-05-22 14:08:51 +02:00
for ( $i = 1 ; $i <= $j ; $i ++ ) {
if ( in_array ( $widget_id , $sidebars_widgets [ $sbname ], true ) )
$selected = selected ( $i , $key + 1 , false );
echo " \t \t <option value=' $i ' $selected > $i </option> \n " ;
}
echo " \t \t </select> \n " ;
}
echo " </td></tr> \n " ;
} ?>
</ tbody ></ table >
</ div >
2009-04-20 12:58:50 +02:00
2009-05-22 14:08:51 +02:00
< div class = " widget-control-actions " >
2010-10-28 23:56:43 +02:00
< ? php
if ( isset ( $_GET [ 'addnew' ]) ) { ?>
2009-05-22 14:08:51 +02:00
< a href = " widgets.php " class = " button alignleft " >< ? php _e ( 'Cancel' ); ?> </a>
2010-10-28 23:56:43 +02:00
< ? php
} else {
2010-11-17 19:47:34 +01:00
submit_button ( __ ( 'Delete' ), 'button alignleft' , 'removewidget' , false );
2010-10-28 23:56:43 +02:00
}
submit_button ( __ ( 'Save Widget' ), 'button-primary alignright' , 'savewidget' , false ); ?>
2009-05-22 14:08:51 +02:00
< input type = " hidden " name = " widget-id " class = " widget-id " value = " <?php echo esc_attr( $widget_id ); ?> " />
< input type = " hidden " name = " id_base " class = " id_base " value = " <?php echo esc_attr( $id_base ); ?> " />
< input type = " hidden " name = " multi_number " class = " multi_number " value = " <?php echo esc_attr( $multi_number ); ?> " />
2009-04-20 12:58:50 +02:00
< ? php wp_nonce_field ( " save-delete-widget- $widget_id " ); ?>
2009-05-22 14:08:51 +02:00
< br class = " clear " />
</ div >
</ form >
</ div >
</ div >
2009-04-20 12:58:50 +02:00
< ? php
2010-04-18 08:14:45 +02:00
require_once ( './admin-footer.php' );
2009-04-20 12:58:50 +02:00
exit ;
}
2008-01-05 00:34:33 +01:00
$messages = array (
2009-04-20 12:58:50 +02:00
__ ( 'Changes saved.' )
);
$errors = array (
__ ( 'Error while saving.' ),
__ ( 'Error in displaying the widget settings form.' )
2008-01-05 00:34:33 +01:00
);
2007-06-14 04:25:30 +02:00
2010-04-18 08:14:45 +02:00
require_once ( './admin-header.php' ); ?>
2007-06-14 04:25:30 +02:00
2008-01-05 00:34:33 +01:00
< div class = " wrap " >
2008-11-26 14:51:25 +01:00
< ? php screen_icon (); ?>
2009-05-18 17:11:07 +02:00
< h2 >< ? php echo esc_html ( $title ); ?> </h2>
2007-04-24 03:05:17 +02:00
2009-04-20 12:58:50 +02:00
< ? php if ( isset ( $_GET [ 'message' ]) && isset ( $messages [ $_GET [ 'message' ]]) ) { ?>
2009-12-26 10:00:58 +01:00
< div id = " message " class = " updated " >< p >< ? php echo $messages [ $_GET [ 'message' ]]; ?> </p></div>
2009-04-20 12:58:50 +02:00
< ? php } ?>
< ? php if ( isset ( $_GET [ 'error' ]) && isset ( $errors [ $_GET [ 'error' ]]) ) { ?>
< div id = " message " class = " error " >< p >< ? php echo $errors [ $_GET [ 'error' ]]; ?> </p></div>
< ? php } ?>
2010-03-01 09:16:04 +01:00
< ? php do_action ( 'widgets_admin_page' ); ?>
2009-04-20 12:58:50 +02:00
< div class = " widget-liquid-left " >
< div id = " widgets-left " >
< div id = " available-widgets " class = " widgets-holder-wrap " >
2009-05-04 03:19:10 +02:00
< div class = " sidebar-name " >
< div class = " sidebar-name-arrow " >< br /></ div >
2011-05-06 22:38:49 +02:00
< h3 >< ? php _e ( 'Available Widgets' ); ?> <span id="removing-widget"><?php _ex('Deactivate', 'removing-widget'); ?> <span></span></span></h3></div>
2009-05-24 17:46:09 +02:00
< 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 " >
2009-04-20 12:58:50 +02:00
< ? php wp_list_widgets (); ?>
2009-05-24 17:46:09 +02:00
</ div >
< br class = 'clear' />
</ div >
2009-04-20 12:58:50 +02:00
< br class = " clear " />
2009-04-11 16:37:24 +02:00
</ div >
2007-06-14 04:25:30 +02:00
2011-09-03 05:01:11 +02:00
< ? php
foreach ( $wp_registered_sidebars as $sidebar => $registered_sidebar ) {
if ( 'wp_inactive_widgets' == $sidebar || 'orphaned_widgets' == substr ( $sidebar , 0 , 16 ) ) {
$wrap_class = 'widgets-holder-wrap' ;
if ( ! empty ( $registered_sidebar [ 'class' ] ) )
$wrap_class .= ' ' . $registered_sidebar [ 'class' ];
?>
< div class = " <?php esc_attr_e( $wrap_class ); ?> " >
< div class = " sidebar-name " >
< div class = " sidebar-name-arrow " >< br /></ div >
< h3 >< ? php esc_html_e ( $registered_sidebar [ 'name' ] ); ?>
< span >< img src = " <?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?> " class = " ajax-feedback " title = " " alt = " " /></ span >
</ h3 >
</ div >
< div class = " widget-holder inactive " >
< ? php wp_list_widget_controls ( $registered_sidebar [ 'id' ] ); ?>
< br class = " clear " />
</ div >
2009-05-03 07:27:13 +02:00
</ div >
2011-09-03 05:01:11 +02:00
< ? php
}
}
?>
2009-04-20 12:58:50 +02:00
</ div >
</ div >
2008-01-05 00:34:33 +01:00
2009-04-20 12:58:50 +02:00
< div class = " widget-liquid-right " >
2009-05-03 07:27:13 +02:00
< div id = " widgets-right " >
2009-04-11 16:37:24 +02:00
< ? php
2009-04-20 12:58:50 +02:00
$i = 0 ;
foreach ( $wp_registered_sidebars as $sidebar => $registered_sidebar ) {
2011-09-03 05:01:11 +02:00
if ( 'wp_inactive_widgets' == $sidebar || 'orphaned_widgets' == substr ( $sidebar , 0 , 16 ) )
2009-05-03 07:27:13 +02:00
continue ;
2011-09-03 00:13:55 +02:00
$wrap_class = 'widgets-holder-wrap' ;
if ( ! empty ( $registered_sidebar [ 'class' ] ) )
$wrap_class .= ' sidebar-' . $registered_sidebar [ 'class' ];
if ( $i )
$wrap_class .= ' closed' ; ?>
< div class = " <?php esc_attr_e( $wrap_class ); ?> " >
2009-05-04 03:19:10 +02:00
< div class = " sidebar-name " >
< div class = " sidebar-name-arrow " >< br /></ div >
2009-05-18 17:11:07 +02:00
< h3 >< ? php echo esc_html ( $registered_sidebar [ 'name' ] ); ?>
2010-05-03 20:16:22 +02:00
< span >< img src = " <?php echo esc_url( admin_url( 'images/wpspin_dark.gif' ) ); ?> " class = " ajax-feedback " title = " " alt = " " /></ span ></ h3 ></ div >
2009-05-03 07:27:13 +02:00
< ? php wp_list_widget_controls ( $sidebar ); // Show the control forms for each of the widgets in this sidebar ?>
2008-03-10 06:19:12 +01:00
</ div >
2009-04-20 12:58:50 +02:00
< ? php
$i ++ ;
} ?>
</ div >
2009-05-03 07:27:13 +02:00
</ div >
2009-04-20 12:58:50 +02:00
< form action = " " method = " post " >
< ? php wp_nonce_field ( 'save-sidebar-widgets' , '_wpnonce_widgets' , false ); ?>
</ form >
< br class = " clear " />
2008-01-05 00:34:33 +01:00
</ div >
2009-04-11 16:37:24 +02:00
< ? php
do_action ( 'sidebar_admin_page' );
2010-04-18 08:14:45 +02:00
require_once ( './admin-footer.php' );