2007-04-24 01:05:17 +00:00
<? php
2008-09-19 01:41:18 +00:00
/**
* API for creating dynamic sidebar without hardcoding functionality into
* themes. Includes both internal WordPress routines and theme use routines.
*
* This functionality was found in a plugin before WordPress 2.2 release which
* included it in the core from that point on.
*
* @link http://codex.wordpress.org/Plugins/WordPress_Widgets WordPress Widgets
* @link http://codex.wordpress.org/Plugins/WordPress_Widgets_Api Widgets API
*
* @package WordPress
* @subpackage Widgets
*/
2007-04-24 01:05:17 +00:00
2009-03-13 23:18:57 +00:00
/**
* This class must be extended for each widget and WP_Widget::widget(), WP_Widget::update()
* and WP_Widget::form() need to be over-ridden.
2009-03-18 02:43:45 +00:00
*
2009-03-13 23:18:57 +00:00
* @package WordPress
* @subpackage Widgets
* @since 2.8
*/
class WP_Widget {
2009-04-20 10:58:50 +00:00
var $id_base ; // Root id for all widgets of this type.
2009-03-13 23:18:57 +00:00
var $name ; // Name for this widget type.
var $widget_options ; // Option array passed to wp_register_sidebar_widget()
var $control_options ; // Option array passed to wp_register_widget_control()
var $number = false ; // Unique ID number of the current instance.
var $id = false ; // Unique ID string of the current instance (id_base-number)
var $updated = false ; // Set true when we update the data after a POST submit - makes sure we don't do it twice.
// Member functions that you must over-ride.
2009-03-18 07:20:58 +00:00
/** Echo the widget content.
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* Subclasses should over-ride this function to generate their widget code.
*
* @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
* @param array $instance The settings for the particular instance of the widget
*/
2009-03-13 23:18:57 +00:00
function widget ( $args , $instance ) {
die ( 'function WP_Widget::widget() must be over-ridden in a sub-class.' );
}
/** Update a particular instance.
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* This function should check that $new_instance is set correctly.
* The newly calculated value of $instance should be returned.
2009-04-11 14:37:24 +00:00
* If "false" is returned, the instance won't be saved/updated.
2009-03-18 07:20:58 +00:00
*
* @param array $new_instance New settings for this instance as input by the user via form()
* @param array $old_instance Old settings for this instance
2009-04-11 14:37:24 +00:00
* @return array Settings to save or bool false to cancel saving
2009-03-18 07:20:58 +00:00
*/
2009-03-13 23:18:57 +00:00
function update ( $new_instance , $old_instance ) {
2009-03-14 16:34:08 +00:00
return $new_instance ;
2009-03-13 23:18:57 +00:00
}
2009-03-18 07:20:58 +00:00
/** Echo the settings update form
2009-04-20 18:18:39 +00:00
*
2009-04-20 10:58:50 +00:00
* @param array $instance Current settings
2009-03-18 07:20:58 +00:00
*/
2009-03-13 23:18:57 +00:00
function form ( $instance ) {
2009-03-14 16:34:08 +00:00
echo '<p>' . __ ( 'There are no options for this widget.' ) . '</p>' ;
2009-04-20 10:58:50 +00:00
return false ;
2009-03-13 23:18:57 +00:00
}
// Functions you'll need to call.
/**
* PHP4 constructor
*/
2009-04-22 04:01:20 +00:00
function WP_Widget ( $id_base = false , $name , $widget_options = array (), $control_options = array () ) {
2009-03-13 23:18:57 +00:00
$this -> __construct ( $id_base , $name , $widget_options , $control_options );
}
/**
* PHP5 constructor
* widget_options: passed to wp_register_sidebar_widget()
* - description
* - classname
* control_options: passed to wp_register_widget_control()
* - width
* - height
*/
2009-04-22 04:01:20 +00:00
function __construct ( $id_base = false , $name , $widget_options = array (), $control_options = array () ) {
$this -> id_base = $id_base === false ? str_replace ( 'wp_widget_' , '' , strtolower ( get_class ( $this )) ) : $id_base ;
2009-03-13 23:18:57 +00:00
$this -> name = $name ;
$this -> option_name = 'widget_' . $id_base ;
$this -> widget_options = wp_parse_args ( $widget_options , array ( 'classname' => $this -> option_name ) );
$this -> control_options = wp_parse_args ( $control_options , array ( 'id_base' => $this -> id_base ) );
}
2009-03-18 07:20:58 +00:00
/** Constructs name attributes for use in form() fields
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* This function should be used in form() methods to create name attributes for fields to be saved by update()
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* @param string $field_name Field name
* @return string Name attribute for $field_name
*/
2009-03-13 23:18:57 +00:00
function get_field_name ( $field_name ) {
return 'widget-' . $this -> id_base . '[' . $this -> number . '][' . $field_name . ']' ;
}
2009-03-18 07:20:58 +00:00
/** Constructs id attributes for use in form() fields
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* This function should be used in form() methods to create id attributes for fields to be saved by update()
2009-04-20 18:18:39 +00:00
*
2009-03-18 07:20:58 +00:00
* @param string $field_name Field name
* @return string ID attribute for $field_name
*/
2009-03-13 23:18:57 +00:00
function get_field_id ( $field_name ) {
return 'widget-' . $this -> id_base . '-' . $this -> number . '-' . $field_name ;
}
2009-03-18 07:20:58 +00:00
// Private Functions. Don't worry about these.
2009-03-17 23:44:36 +00:00
function _register () {
2009-03-13 23:18:57 +00:00
$settings = $this -> get_settings ();
if ( empty ( $settings ) ) {
// If there are none, we register the widget's existance with a
// generic template
$this -> _set ( 1 );
$this -> _register_one ();
} elseif ( is_array ( $settings ) ) {
foreach ( array_keys ( $settings ) as $number ) {
if ( is_numeric ( $number ) ) {
$this -> _set ( $number );
$this -> _register_one ( $number );
}
}
}
}
function _set ( $number ) {
$this -> number = $number ;
$this -> id = $this -> id_base . '-' . $number ;
}
function _get_display_callback () {
return array ( & $this , 'display_callback' );
}
2009-03-17 00:59:42 +00:00
function _get_update_callback () {
return array ( & $this , 'update_callback' );
}
function _get_form_callback () {
return array ( & $this , 'form_callback' );
2009-03-13 23:18:57 +00:00
}
/** Generate the actual widget content.
* Just finds the instance and calls widget().
* Do NOT over-ride this function. */
function display_callback ( $args , $widget_args = 1 ) {
if ( is_numeric ( $widget_args ) )
$widget_args = array ( 'number' => $widget_args );
$widget_args = wp_parse_args ( $widget_args , array ( 'number' => - 1 ) );
$this -> _set ( $widget_args [ 'number' ] );
$settings = $this -> get_settings ();
if ( array_key_exists ( $this -> number , $settings ) )
$this -> widget ( $args , $settings [ $this -> number ]);
}
2009-03-17 00:59:42 +00:00
/** Deal with changed settings.
2009-03-13 23:18:57 +00:00
* Do NOT over-ride this function. */
2009-03-17 00:59:42 +00:00
function update_callback ( $widget_args = 1 ) {
2009-03-13 23:18:57 +00:00
global $wp_registered_widgets ;
if ( is_numeric ( $widget_args ) )
$widget_args = array ( 'number' => $widget_args );
$widget_args = wp_parse_args ( $widget_args , array ( 'number' => - 1 ) );
$all_instances = $this -> get_settings ();
// We need to update the data
if ( ! $this -> updated && ! empty ( $_POST [ 'sidebar' ]) ) {
// Tells us what sidebar to put the data in
$sidebar = ( string ) $_POST [ 'sidebar' ];
$sidebars_widgets = wp_get_sidebars_widgets ();
if ( isset ( $sidebars_widgets [ $sidebar ]) )
$this_sidebar =& $sidebars_widgets [ $sidebar ];
else
$this_sidebar = array ();
2009-04-11 14:37:24 +00:00
if ( isset ( $_POST [ 'delete_widget' ]) && $_POST [ 'delete_widget' ] ) {
// Delete the settings for this instance of the widget
if ( isset ( $_POST [ 'widget-id' ]) )
$del_id = $_POST [ 'widget-id' ];
else
return ;
if ( $this -> _get_display_callback () == $wp_registered_widgets [ $del_id ][ 'callback' ] && isset ( $wp_registered_widgets [ $del_id ][ 'params' ][ 0 ][ 'number' ]) ) {
$number = $wp_registered_widgets [ $del_id ][ 'params' ][ 0 ][ 'number' ];
if ( $this -> id_base . '-' . $number == $del_id ) {
2009-03-13 23:18:57 +00:00
unset ( $all_instances [ $number ]);
}
}
2009-04-11 14:37:24 +00:00
} else {
2009-04-20 10:58:50 +00:00
if ( isset ( $_POST [ 'widget-' . $this -> id_base ]) && is_array ( $_POST [ 'widget-' . $this -> id_base ]) ) {
$settings = $_POST [ 'widget-' . $this -> id_base ];
} else {
$num = $_POST [ 'multi_number' ] ? ( int ) $_POST [ 'multi_number' ] : ( int ) $_POST [ 'widget_number' ];
$settings = array ( $num => array () );
}
foreach ( $settings as $number => $new_instance ) {
2009-04-11 14:37:24 +00:00
$new_instance = stripslashes_deep ( $new_instance );
$this -> _set ( $number );
2009-03-17 02:58:15 +00:00
2009-04-11 14:37:24 +00:00
if ( isset ( $all_instances [ $number ]) )
$instance = $this -> update ( $new_instance , $all_instances [ $number ]);
else
$instance = $this -> update ( $new_instance , array ());
2009-03-13 23:18:57 +00:00
2009-04-11 14:37:24 +00:00
if ( false !== $instance )
$all_instances [ $number ] = $instance ;
}
2009-03-13 23:18:57 +00:00
}
$this -> save_settings ( $all_instances );
$this -> updated = true ;
}
2009-03-17 00:59:42 +00:00
}
/** Generate the control form.
* Do NOT over-ride this function. */
function form_callback ( $widget_args = 1 ) {
if ( is_numeric ( $widget_args ) )
$widget_args = array ( 'number' => $widget_args );
$widget_args = wp_parse_args ( $widget_args , array ( 'number' => - 1 ) );
$all_instances = $this -> get_settings ();
2009-03-13 23:18:57 +00:00
if ( - 1 == $widget_args [ 'number' ] ) {
2009-04-11 14:37:24 +00:00
// We echo out a form where 'number' can be set later
$this -> _set ( '__i__' );
2009-03-13 23:18:57 +00:00
$instance = array ();
} else {
$this -> _set ( $widget_args [ 'number' ]);
$instance = $all_instances [ $widget_args [ 'number' ] ];
}
2009-04-20 10:58:50 +00:00
return $this -> form ( $instance );
2009-03-13 23:18:57 +00:00
}
/** Helper function: Registers a single instance. */
function _register_one ( $number = - 1 ) {
wp_register_sidebar_widget ( $this -> id , $this -> name , $this -> _get_display_callback (), $this -> widget_options , array ( 'number' => $number ) );
2009-04-11 14:37:24 +00:00
_register_widget_update_callback ( $this -> id_base , $this -> _get_update_callback (), $this -> control_options , array ( 'number' => - 1 ) );
2009-03-17 00:59:42 +00:00
_register_widget_form_callback ( $this -> id , $this -> name , $this -> _get_form_callback (), $this -> control_options , array ( 'number' => $number ) );
2009-03-13 23:18:57 +00:00
}
2009-03-18 02:43:45 +00:00
2009-03-13 23:18:57 +00:00
function save_settings ( $settings ) {
$settings [ '_multiwidget' ] = 1 ;
update_option ( $this -> option_name , $settings );
}
function get_settings () {
2009-03-18 02:43:45 +00:00
$settings = get_option ( $this -> option_name );
2009-03-13 23:18:57 +00:00
if ( ! is_array ( $settings ) )
2009-03-14 16:34:08 +00:00
$settings = array ();
2009-03-13 23:18:57 +00:00
if ( ! array_key_exists ( '_multiwidget' , $settings ) ) {
// old format, conver if single widget
$settings = wp_convert_widget_settings ( $this -> id_base , $this -> option_name , $settings );
}
unset ( $settings [ '_multiwidget' ]);
return $settings ;
}
}
2009-03-19 22:10:18 +00:00
/**
* Singleton that registers and instantiates WP_Widget classes.
*
* @package WordPress
* @subpackage Widgets
* @since 2.8
*/
class WP_Widget_Factory {
var $widgets = array ();
function WP_Widget_Factory () {
add_action ( 'widgets_init' , array ( & $this , '_register_widgets' ), 100 );
}
function register ( $widget_class ) {
2009-04-17 20:45:33 +00:00
$this -> widgets [ $widget_class ] = new $widget_class ();
2009-03-19 22:10:18 +00:00
}
2009-04-17 05:54:07 +00:00
function unregister ( $widget_class ) {
2009-04-17 20:45:33 +00:00
if ( isset ( $this -> widgets [ $widget_class ]) )
unset ( $this -> widgets [ $widget_class ]);
2009-04-17 05:54:07 +00:00
}
2009-03-19 22:10:18 +00:00
function _register_widgets () {
foreach ( $this -> widgets as $widget )
$widget -> _register ();
}
}
/* Global Variables */
/** @ignore */
global $wp_registered_sidebars , $wp_registered_widgets , $wp_registered_widget_controls , $wp_registered_widget_updates ;
/**
* Stores the sidebars, since many themes can have more than one.
*
* @global array $wp_registered_sidebars
* @since 2.2.0
*/
$wp_registered_sidebars = array ();
/**
* Stores the registered widgets.
*
* @global array $wp_registered_widgets
* @since 2.2.0
*/
$wp_registered_widgets = array ();
/**
* Stores the registered widget control (options).
*
* @global array $wp_registered_widget_controls
* @since 2.2.0
*/
$wp_registered_widget_controls = array ();
$wp_registered_widget_updates = array ();
2007-04-24 01:05:17 +00:00
/* Template tags & API functions */
2009-03-17 23:44:36 +00:00
/**
* Register a widget
2009-03-18 02:43:45 +00:00
*
2009-03-17 23:44:36 +00:00
* Registers a WP_Widget widget
2009-03-18 02:43:45 +00:00
*
2009-03-17 23:44:36 +00:00
* @since 2.8.0
2009-03-18 02:43:45 +00:00
*
2009-03-17 23:44:36 +00:00
* @see WP_Widget
* @see WP_Widget_Factory
* @uses WP_Widget_Factory
2009-03-18 02:43:45 +00:00
*
2009-03-17 23:44:36 +00:00
* @param string $widget_class The name of a class that extends WP_Widget
*/
function register_widget ( $widget_class ) {
global $wp_widget_factory ;
$wp_widget_factory -> register ( $widget_class );
}
2009-04-17 05:54:07 +00:00
/**
* Unregister a widget
*
* Unregisters a WP_Widget widget. Useful for unregistering default widgets.
* Run within a function hooked to the widgets_init action.
*
* @since 2.8.0
*
* @see WP_Widget
* @see WP_Widget_Factory
* @uses WP_Widget_Factory
*
* @param string $widget_class The name of a class that extends WP_Widget
*/
function unregister_widget ( $widget_class ) {
global $wp_widget_factory ;
$wp_widget_factory -> unregister ( $widget_class );
}
2008-09-19 01:41:18 +00:00
/**
* Creates multiple sidebars.
*
* If you wanted to quickly create multiple sidebars for a theme or internally.
* This function will allow you to do so. If you don't pass the 'name' and/or
* 'id' in $args, then they will be built for you.
*
* The default for the name is "Sidebar #", with '#' being replaced with the
* number the sidebar is currently when greater than one. If first sidebar, the
* name will be just "Sidebar". The default for id is "sidebar-" followed by the
* number the sidebar creation is currently at.
*
* @since 2.2.0
*
* @see register_sidebar() The second parameter is documented by register_sidebar() and is the same here.
* @uses parse_str() Converts a string to an array to be used in the rest of the function.
* @uses register_sidebar() Sends single sidebar information [name, id] to this
* function to handle building the sidebar.
*
* @param int $number Number of sidebars to create.
* @param string|array $args Builds Sidebar based off of 'name' and 'id' values.
*/
2007-04-24 21:36:17 +00:00
function register_sidebars ( $number = 1 , $args = array ()) {
2007-12-14 08:06:08 +00:00
global $wp_registered_sidebars ;
2007-04-24 21:36:17 +00:00
$number = ( int ) $number ;
if ( is_string ( $args ) )
parse_str ( $args , $args );
2007-10-19 16:32:56 +00:00
for ( $i = 1 ; $i <= $number ; $i ++ ) {
2007-04-24 21:36:17 +00:00
$_args = $args ;
2007-12-14 08:06:08 +00:00
2007-04-24 21:36:17 +00:00
if ( $number > 1 ) {
2007-12-14 08:06:08 +00:00
$_args [ 'name' ] = isset ( $args [ 'name' ]) ? sprintf ( $args [ 'name' ], $i ) : sprintf ( __ ( 'Sidebar %d' ), $i );
2007-04-24 21:36:17 +00:00
} else {
$_args [ 'name' ] = isset ( $args [ 'name' ]) ? $args [ 'name' ] : __ ( 'Sidebar' );
2007-04-24 01:05:17 +00:00
}
2007-12-14 08:06:08 +00:00
if ( isset ( $args [ 'id' ])) {
$_args [ 'id' ] = $args [ 'id' ];
} else {
$n = count ( $wp_registered_sidebars );
do {
$n ++ ;
$_args [ 'id' ] = "sidebar- $n " ;
} while ( isset ( $wp_registered_sidebars [ $_args [ 'id' ]]));
}
2007-04-24 21:36:17 +00:00
register_sidebar ( $_args );
2007-04-24 01:05:17 +00:00
}
}
2008-09-19 01:41:18 +00:00
/**
* Builds the definition for a single sidebar and returns the ID.
*
* The $args parameter takes either a string or an array with 'name' and 'id'
* contained in either usage. It will be noted that the values will be applied
* to all sidebars, so if creating more than one, it will be advised to allow
* for WordPress to create the defaults for you.
*
* Example for string would be <code>'name=whatever;id=whatever1'</code> and for
* the array it would be <code>array(
* 'name' => 'whatever',
* 'id' => 'whatever1')</code>.
*
* name - The name of the sidebar, which presumably the title which will be
* displayed.
* id - The unique identifier by which the sidebar will be called by.
* before_widget - The content that will prepended to the widgets when they are
* displayed.
* after_widget - The content that will be appended to the widgets when they are
* displayed.
* before_title - The content that will be prepended to the title when displayed.
* after_title - the content that will be appended to the title when displayed.
*
* <em>Content</em> is assumed to be HTML and should be formatted as such, but
* doesn't have to be.
*
* @since 2.2.0
* @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.
* @uses parse_str() Converts a string to an array to be used in the rest of the function.
* @usedby register_sidebars()
*
* @param string|array $args Builds Sidebar based off of 'name' and 'id' values
* @return string The sidebar id that was added.
*/
2007-04-24 21:36:17 +00:00
function register_sidebar ( $args = array ()) {
global $wp_registered_sidebars ;
if ( is_string ( $args ) )
parse_str ( $args , $args );
$i = count ( $wp_registered_sidebars ) + 1 ;
$defaults = array (
2007-04-30 20:02:02 +00:00
'name' => sprintf ( __ ( 'Sidebar %d' ), $i ),
'id' => "sidebar- $i " ,
2007-04-24 21:36:17 +00:00
'before_widget' => '<li id="%1$s" class="widget %2$s">' ,
'after_widget' => "</li> \n " ,
'before_title' => '<h2 class="widgettitle">' ,
'after_title' => "</h2> \n " ,
);
2008-08-04 20:34:45 +00:00
$sidebar = array_merge ( $defaults , ( array ) $args );
2007-04-24 21:36:17 +00:00
$wp_registered_sidebars [ $sidebar [ 'id' ]] = $sidebar ;
return $sidebar [ 'id' ];
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
* Removes a sidebar from the list.
*
* @since 2.2.0
*
* @uses $wp_registered_sidebars Stores the new sidebar in this array by sidebar ID.
*
* @param string $name The ID of the sidebar when it was added.
*/
2007-04-24 21:36:17 +00:00
function unregister_sidebar ( $name ) {
global $wp_registered_sidebars ;
2007-06-14 02:25:30 +00:00
2007-04-24 21:36:17 +00:00
if ( isset ( $wp_registered_sidebars [ $name ] ) )
unset ( $wp_registered_sidebars [ $name ] );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Register widget for use in sidebars.
*
* The default widget option is 'classname' that can be override.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* The function can also be used to unregister widgets when $output_callback
* parameter is an empty string.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @uses $wp_registered_widgets Uses stored registered widgets.
* @uses $wp_register_widget_defaults Retrieves widget defaults.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* @param int|string $id Widget ID.
* @param string $name Widget display title.
* @param callback $output_callback Run when widget is called.
* @param array|string Optional. $options Widget Options.
* @param mixed $params,... Widget parameters to add to widget.
* @return null Will return if $output_callback is empty after removing widget.
2008-09-19 01:41:18 +00:00
*/
2007-05-06 07:08:11 +00:00
function wp_register_sidebar_widget ( $id , $name , $output_callback , $options = array ()) {
2008-01-04 23:34:33 +00:00
global $wp_registered_widgets ;
2007-05-06 07:08:11 +00:00
2008-05-09 16:29:17 +00:00
$id = strtolower ( $id );
2007-05-06 07:08:11 +00:00
if ( empty ( $output_callback ) ) {
unset ( $wp_registered_widgets [ $id ]);
return ;
}
$defaults = array ( 'classname' => $output_callback );
$options = wp_parse_args ( $options , $defaults );
2007-04-24 21:36:17 +00:00
$widget = array (
'name' => $name ,
'id' => $id ,
'callback' => $output_callback ,
'params' => array_slice ( func_get_args (), 4 )
);
2007-05-06 07:08:11 +00:00
$widget = array_merge ( $widget , $options );
2007-04-24 21:36:17 +00:00
2008-01-04 23:34:33 +00:00
if ( is_callable ( $output_callback ) && ( ! isset ( $wp_registered_widgets [ $id ]) || did_action ( 'widgets_init' ) ) )
2007-04-24 21:36:17 +00:00
$wp_registered_widgets [ $id ] = $widget ;
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Retrieve description for widget.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* When registering widgets, the options can also include 'description' that
* describes the widget for display on the widget administration panel or
* in the theme.
2008-09-19 01:41:18 +00:00
*
* @since 2.5.0
*
2008-09-23 04:03:28 +00:00
* @param int|string $id Widget ID.
* @return string Widget description, if available. Null on failure to retrieve description.
2008-09-19 01:41:18 +00:00
*/
2008-01-04 23:34:33 +00:00
function wp_widget_description ( $id ) {
if ( ! is_scalar ( $id ) )
return ;
global $wp_registered_widgets ;
if ( isset ( $wp_registered_widgets [ $id ][ 'description' ]) )
return wp_specialchars ( $wp_registered_widgets [ $id ][ 'description' ] );
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Remove widget from sidebar.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @param int|string $id Widget ID.
2008-09-19 01:41:18 +00:00
*/
2007-05-06 07:08:11 +00:00
function wp_unregister_sidebar_widget ( $id ) {
wp_register_sidebar_widget ( $id , '' , '' );
wp_unregister_widget_control ( $id );
}
2007-04-24 21:36:17 +00:00
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Registers widget control callback for customizing options.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* The options contains the 'height', 'width', and 'id_base' keys. The 'height'
* option is never used. The 'width' option is the width of the fully expanded
* control form, but try hard to use the default width. The 'id_base' is for
* multi-widgets (widgets which allow multiple instances such as the text
* widget), an id_base must be provided. The widget id will end up looking like
* {$id_base}-{$unique_number}.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @param int|string $id Sidebar ID.
* @param string $name Sidebar display name.
* @param callback $control_callback Run when sidebar is displayed.
* @param array|string $options Optional. Widget options. See above long description.
* @param mixed $params,... Optional. Additional parameters to add to widget.
2008-09-19 01:41:18 +00:00
*/
2007-05-06 07:08:11 +00:00
function wp_register_widget_control ( $id , $name , $control_callback , $options = array ()) {
2009-03-17 00:59:42 +00:00
global $wp_registered_widget_controls , $wp_registered_widget_updates ;
2008-08-09 05:36:14 +00:00
2008-05-09 16:29:17 +00:00
$id = strtolower ( $id );
2009-04-11 14:37:24 +00:00
$update_id = preg_replace ( '/-[0-9]+$/' , '' , $id );
2007-04-24 21:36:17 +00:00
2007-05-06 07:08:11 +00:00
if ( empty ( $control_callback ) ) {
2007-04-28 17:04:16 +00:00
unset ( $wp_registered_widget_controls [ $id ]);
2009-04-11 14:37:24 +00:00
unset ( $wp_registered_widget_updates [ $update_id ]);
2007-05-06 07:08:11 +00:00
return ;
}
2008-01-04 23:34:33 +00:00
if ( isset ( $wp_registered_widget_controls [ $id ]) && ! did_action ( 'widgets_init' ) )
2007-05-06 07:08:11 +00:00
return ;
2008-01-04 23:34:33 +00:00
$defaults = array ( 'width' => 250 , 'height' => 200 ); // height is never used
2007-05-06 07:08:11 +00:00
$options = wp_parse_args ( $options , $defaults );
$options [ 'width' ] = ( int ) $options [ 'width' ];
$options [ 'height' ] = ( int ) $options [ 'height' ];
$widget = array (
'name' => $name ,
'id' => $id ,
'callback' => $control_callback ,
'params' => array_slice ( func_get_args (), 4 )
);
$widget = array_merge ( $widget , $options );
2009-04-11 14:37:24 +00:00
$wp_registered_widget_controls [ $id ] = $widget ;
if ( isset ( $wp_registered_widget_updates [ $update_id ]) )
return ;
if ( isset ( $widget [ 'params' ][ 0 ][ 'number' ]) )
$widget [ 'params' ][ 0 ][ 'number' ] = - 1 ;
unset ( $widget [ 'width' ], $widget [ 'height' ], $widget [ 'name' ], $widget [ 'id' ]);
$wp_registered_widget_updates [ $update_id ] = $widget ;
2009-03-17 00:59:42 +00:00
}
2009-04-11 14:37:24 +00:00
function _register_widget_update_callback ( $id_base , $update_callback , $options = array ()) {
2009-03-17 00:59:42 +00:00
global $wp_registered_widget_updates ;
2009-04-11 14:37:24 +00:00
if ( isset ( $wp_registered_widget_updates [ $id_base ]) ) {
if ( empty ( $update_callback ) )
unset ( $wp_registered_widget_updates [ $id_base ]);
2009-03-17 00:59:42 +00:00
return ;
}
$widget = array (
'callback' => $update_callback ,
2009-04-11 14:37:24 +00:00
'params' => array_slice ( func_get_args (), 3 )
2009-03-17 00:59:42 +00:00
);
2009-04-11 14:37:24 +00:00
$widget = array_merge ( $widget , $options );
$wp_registered_widget_updates [ $id_base ] = $widget ;
2009-03-17 00:59:42 +00:00
}
function _register_widget_form_callback ( $id , $name , $form_callback , $options = array ()) {
global $wp_registered_widget_controls ;
$id = strtolower ( $id );
if ( empty ( $form_callback ) ) {
unset ( $wp_registered_widget_controls [ $id ]);
return ;
}
if ( isset ( $wp_registered_widget_controls [ $id ]) && ! did_action ( 'widgets_init' ) )
return ;
2009-04-11 14:37:24 +00:00
$defaults = array ( 'width' => 250 , 'height' => 200 );
2009-03-17 00:59:42 +00:00
$options = wp_parse_args ( $options , $defaults );
$options [ 'width' ] = ( int ) $options [ 'width' ];
$options [ 'height' ] = ( int ) $options [ 'height' ];
$widget = array (
'name' => $name ,
'id' => $id ,
'callback' => $form_callback ,
'params' => array_slice ( func_get_args (), 4 )
);
$widget = array_merge ( $widget , $options );
2007-05-06 07:08:11 +00:00
$wp_registered_widget_controls [ $id ] = $widget ;
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Remove control callback for widget.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
2008-09-23 04:03:28 +00:00
* @uses wp_register_widget_control() Unregisters by using empty callback.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* @param int|string $id Widget ID.
2008-09-19 01:41:18 +00:00
*/
2007-05-06 07:08:11 +00:00
function wp_unregister_widget_control ( $id ) {
return wp_register_widget_control ( $id , '' , '' );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Display dynamic sidebar.
*
* By default it displays the default sidebar or 'sidebar-1'. The 'sidebar-1' is
* not named by the theme, the actual name is '1', but 'sidebar-' is added to
* the registered sidebars for the name. If you named your sidebar 'after-post',
* then the parameter $index will still be 'after-post', but the lookup will be
* for 'sidebar-after-post'.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* It is confusing for the $index parameter, but just know that it should just
* work. When you register the sidebar in the theme, you will use the same name
* for this function or "Pay no heed to the man behind the curtain." Just accept
* it as an oddity of WordPress sidebar register and display.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @param int|string $index Optional, default is 1. Name or ID of dynamic sidebar.
* @return bool True, if widget sidebar was found and called. False if not found or not called.
2008-09-19 01:41:18 +00:00
*/
2007-04-24 21:36:17 +00:00
function dynamic_sidebar ( $index = 1 ) {
global $wp_registered_sidebars , $wp_registered_widgets ;
2007-04-24 01:05:17 +00:00
2007-04-24 21:36:17 +00:00
if ( is_int ( $index ) ) {
$index = "sidebar- $index " ;
} else {
$index = sanitize_title ( $index );
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $wp_registered_sidebars as $key => $value ) {
2007-05-14 05:13:39 +00:00
if ( sanitize_title ( $value [ 'name' ]) == $index ) {
$index = $key ;
break ;
}
}
2007-04-24 01:05:17 +00:00
}
2007-04-24 21:36:17 +00:00
$sidebars_widgets = wp_get_sidebars_widgets ();
2007-12-20 21:25:12 +00:00
if ( empty ( $wp_registered_sidebars [ $index ]) || ! array_key_exists ( $index , $sidebars_widgets ) || ! is_array ( $sidebars_widgets [ $index ]) || empty ( $sidebars_widgets [ $index ]) )
2007-04-24 21:36:17 +00:00
return false ;
$sidebar = $wp_registered_sidebars [ $index ];
$did_one = false ;
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $sidebars_widgets [ $index ] as $id ) {
2008-02-02 07:57:51 +00:00
$params = array_merge (
array ( array_merge ( $sidebar , array ( 'widget_id' => $id , 'widget_name' => $wp_registered_widgets [ $id ][ 'name' ]) ) ),
( array ) $wp_registered_widgets [ $id ][ 'params' ]
);
2007-04-24 21:36:17 +00:00
// Substitute HTML id and class attributes into before_widget
2007-09-12 20:48:21 +00:00
$classname_ = '' ;
foreach ( ( array ) $wp_registered_widgets [ $id ][ 'classname' ] as $cn ) {
if ( is_string ( $cn ) )
$classname_ .= '_' . $cn ;
elseif ( is_object ( $cn ) )
$classname_ .= '_' . get_class ( $cn );
}
$classname_ = ltrim ( $classname_ , '_' );
2007-09-06 23:27:16 +00:00
$params [ 0 ][ 'before_widget' ] = sprintf ( $params [ 0 ][ 'before_widget' ], $id , $classname_ );
2007-04-24 21:36:17 +00:00
2008-02-02 07:57:51 +00:00
$params = apply_filters ( 'dynamic_sidebar_params' , $params );
$callback = $wp_registered_widgets [ $id ][ 'callback' ];
2007-04-24 21:36:17 +00:00
if ( is_callable ( $callback ) ) {
call_user_func_array ( $callback , $params );
$did_one = true ;
2007-04-24 01:05:17 +00:00
}
}
2007-04-24 21:36:17 +00:00
return $did_one ;
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Whether widget is registered using callback with widget ID.
2008-09-19 01:41:18 +00:00
*
2009-02-10 15:22:08 +00:00
* Without the optional $widget_id parameter, returns the ID of the first sidebar in which the first instance of the widget with the given callback is found.
* With the $widget_id parameter, returns the ID of the sidebar in which the widget with that callback AND that ID is found.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @param callback $callback Widget callback to check.
* @param int $widget_id Optional, but needed for checking. Widget ID.
/* @return mixed false if widget is not active or id of sidebar in which the widget is active.
2008-01-04 23:34:33 +00:00
*/
2008-02-28 00:31:46 +00:00
function is_active_widget ( $callback , $widget_id = false ) {
2007-04-24 21:36:17 +00:00
global $wp_registered_widgets ;
$sidebars_widgets = wp_get_sidebars_widgets ( false );
2008-01-04 23:34:33 +00:00
if ( is_array ( $sidebars_widgets ) ) foreach ( $sidebars_widgets as $sidebar => $widgets )
2007-04-24 21:36:17 +00:00
if ( is_array ( $widgets ) ) foreach ( $widgets as $widget )
2008-02-22 17:43:56 +00:00
if ( isset ( $wp_registered_widgets [ $widget ][ 'callback' ]) && $wp_registered_widgets [ $widget ][ 'callback' ] == $callback )
2008-02-28 00:31:46 +00:00
if ( ! $widget_id || $widget_id == $wp_registered_widgets [ $widget ][ 'id' ] )
return $sidebar ;
2008-03-02 20:17:30 +00:00
2007-04-24 21:36:17 +00:00
return false ;
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Whether the dynamic sidebar is enabled and used by theme.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2008-09-23 04:03:28 +00:00
* @return bool True, if using widgets. False, if not using widgets.
2008-09-19 01:41:18 +00:00
*/
2007-04-24 21:36:17 +00:00
function is_dynamic_sidebar () {
global $wp_registered_widgets , $wp_registered_sidebars ;
$sidebars_widgets = get_option ( 'sidebars_widgets' );
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $wp_registered_sidebars as $index => $sidebar ) {
2007-04-24 21:36:17 +00:00
if ( count ( $sidebars_widgets [ $index ]) ) {
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $sidebars_widgets [ $index ] as $widget )
2007-04-24 21:36:17 +00:00
if ( array_key_exists ( $widget , $wp_registered_widgets ) )
return true ;
2007-04-24 01:05:17 +00:00
}
}
2007-04-24 21:36:17 +00:00
return false ;
2007-04-24 01:05:17 +00:00
}
2007-04-24 21:36:17 +00:00
/* Internal Functions */
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Retrieve full list of sidebars and their widgets.
2008-09-19 01:41:18 +00:00
*
2008-09-23 04:03:28 +00:00
* Will upgrade sidebar widget list, if needed. Will also save updated list, if
* needed.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
* @access private
*
2008-09-23 04:03:28 +00:00
* @param bool $update Optional, default is true. Whether to save upgrade of widget array list.
* @return array Upgraded list of widgets to version 2 array format.
2008-09-19 01:41:18 +00:00
*/
2007-04-24 21:36:17 +00:00
function wp_get_sidebars_widgets ( $update = true ) {
2007-04-30 20:02:02 +00:00
global $wp_registered_widgets , $wp_registered_sidebars ;
2007-04-24 21:36:17 +00:00
2009-01-05 23:03:17 +00:00
$sidebars_widgets = get_option ( 'sidebars_widgets' , array ());
2007-04-24 21:36:17 +00:00
$_sidebars_widgets = array ();
if ( ! isset ( $sidebars_widgets [ 'array_version' ]) )
$sidebars_widgets [ 'array_version' ] = 1 ;
switch ( $sidebars_widgets [ 'array_version' ] ) {
case 1 :
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $sidebars_widgets as $index => $sidebar )
2007-04-24 21:36:17 +00:00
if ( is_array ( $sidebar ) )
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $sidebar as $i => $name ) {
2007-04-24 21:36:17 +00:00
$id = strtolower ( $name );
if ( isset ( $wp_registered_widgets [ $id ]) ) {
$_sidebars_widgets [ $index ][ $i ] = $id ;
continue ;
2007-04-24 01:05:17 +00:00
}
2007-04-24 21:36:17 +00:00
$id = sanitize_title ( $name );
if ( isset ( $wp_registered_widgets [ $id ]) ) {
$_sidebars_widgets [ $index ][ $i ] = $id ;
continue ;
}
2008-04-28 20:08:23 +00:00
2008-04-18 02:19:45 +00:00
$found = false ;
2008-04-28 20:08:23 +00:00
2008-04-18 02:19:45 +00:00
foreach ( $wp_registered_widgets as $widget_id => $widget ) {
if ( strtolower ( $widget [ 'name' ]) == strtolower ( $name ) ) {
$_sidebars_widgets [ $index ][ $i ] = $widget [ 'id' ];
$found = true ;
break ;
} elseif ( sanitize_title ( $widget [ 'name' ]) == sanitize_title ( $name ) ) {
$_sidebars_widgets [ $index ][ $i ] = $widget [ 'id' ];
$found = true ;
break ;
}
}
2008-04-28 20:08:23 +00:00
2008-04-18 02:19:45 +00:00
if ( $found )
continue ;
2008-04-28 20:08:23 +00:00
2007-04-24 21:36:17 +00:00
unset ( $_sidebars_widgets [ $index ][ $i ]);
2007-04-24 01:05:17 +00:00
}
2007-04-24 21:36:17 +00:00
$_sidebars_widgets [ 'array_version' ] = 2 ;
2007-04-30 20:02:02 +00:00
$sidebars_widgets = $_sidebars_widgets ;
unset ( $_sidebars_widgets );
2007-04-24 21:36:17 +00:00
case 2 :
2007-04-30 20:02:02 +00:00
$sidebars = array_keys ( $wp_registered_sidebars );
if ( ! empty ( $sidebars ) ) {
// Move the known-good ones first
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $sidebars as $id ) {
2007-04-30 20:02:02 +00:00
if ( array_key_exists ( $id , $sidebars_widgets ) ) {
$_sidebars_widgets [ $id ] = $sidebars_widgets [ $id ];
unset ( $sidebars_widgets [ $id ], $sidebars [ $id ]);
}
}
// Assign to each unmatched registered sidebar the first available orphan
unset ( $sidebars_widgets [ 'array_version' ] );
while ( ( $sidebar = array_shift ( $sidebars ) ) && $widgets = array_shift ( $sidebars_widgets ) )
$_sidebars_widgets [ $sidebar ] = $widgets ;
$_sidebars_widgets [ 'array_version' ] = 3 ;
$sidebars_widgets = $_sidebars_widgets ;
unset ( $_sidebars_widgets );
}
if ( $update )
update_option ( 'sidebars_widgets' , $sidebars_widgets );
2007-04-24 01:05:17 +00:00
}
2009-01-05 23:03:17 +00:00
if ( isset ( $sidebars_widgets [ 'array_version' ]) )
unset ( $sidebars_widgets [ 'array_version' ]);
2007-04-24 01:05:17 +00:00
2008-10-06 16:57:31 +00:00
$sidebars_widgets = apply_filters ( 'sidebars_widgets' , $sidebars_widgets );
2007-04-30 20:02:02 +00:00
return $sidebars_widgets ;
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Set the sidebar widget option to update sidebars.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
* @access private
*
2008-09-23 04:03:28 +00:00
* @param array $sidebars_widgets Sidebar widgets and their settings.
2008-09-19 01:41:18 +00:00
*/
2007-04-24 01:05:17 +00:00
function wp_set_sidebars_widgets ( $sidebars_widgets ) {
2008-11-25 22:38:36 +00:00
if ( ! isset ( $sidebars_widgets [ 'array_version' ] ) )
$sidebars_widgets [ 'array_version' ] = 3 ;
2007-04-24 21:36:17 +00:00
update_option ( 'sidebars_widgets' , $sidebars_widgets );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2008-09-23 04:03:28 +00:00
* Retrieve default registered sidebars list.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
* @access private
*
2008-09-23 04:03:28 +00:00
* @return array
2008-09-19 01:41:18 +00:00
*/
2007-04-24 01:05:17 +00:00
function wp_get_widget_defaults () {
global $wp_registered_sidebars ;
2007-04-24 21:36:17 +00:00
2007-04-24 01:05:17 +00:00
$defaults = array ();
2007-04-24 21:36:17 +00:00
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $wp_registered_sidebars as $index => $sidebar )
2007-04-24 01:05:17 +00:00
$defaults [ $index ] = array ();
2007-04-24 21:36:17 +00:00
2007-04-24 01:05:17 +00:00
return $defaults ;
}
2009-03-13 22:27:38 +00:00
/**
* Convert the widget settings from single to multi-widget format.
*
* @since 2.8.0
*
* @return array
*/
function wp_convert_widget_settings ( $base_name , $option_name , $settings ) {
// This test may need expanding.
$single = false ;
2009-03-14 16:34:08 +00:00
if ( empty ( $settings ) ) {
$single = true ;
} else {
2009-04-21 19:40:20 +00:00
if ( isset ( $settings [ 'number' ]) )
unset ( $settings [ 'number' ]);
2009-03-14 16:34:08 +00:00
foreach ( array_keys ( $settings ) as $number ) {
if ( ! is_numeric ( $number ) ) {
$single = true ;
break ;
}
2009-03-13 22:27:38 +00:00
}
}
if ( $single ) {
$settings = array ( 2 => $settings );
2009-03-18 02:43:45 +00:00
2009-03-13 22:27:38 +00:00
$sidebars_widgets = get_option ( 'sidebars_widgets' );
foreach ( ( array ) $sidebars_widgets as $index => $sidebar ) {
if ( is_array ( $sidebar ) ) {
foreach ( $sidebar as $i => $name ) {
if ( $base_name == $name ) {
$sidebars_widgets [ $index ][ $i ] = " $name -2" ;
break 2 ;
}
}
}
}
update_option ( 'sidebars_widgets' , $sidebars_widgets );
}
$settings [ '_multiwidget' ] = 1 ;
update_option ( $option_name , $settings );
2009-03-18 02:43:45 +00:00
2009-03-13 22:27:38 +00:00
return $settings ;
}
2009-03-14 17:24:11 +00:00
/**
2009-03-16 22:02:40 +00:00
* Deprecated API
2009-03-14 17:24:11 +00:00
*/
2009-03-18 02:43:45 +00:00
2008-09-19 01:41:18 +00:00
/**
2009-03-16 22:02:40 +00:00
* Register widget for sidebar with backwards compatibility.
2009-03-04 23:49:21 +00:00
*
2009-03-16 22:02:40 +00:00
* Allows $name to be an array that accepts either three elements to grab the
* first element and the third for the name or just uses the first element of
* the array for the name.
2008-09-19 01:41:18 +00:00
*
2009-03-16 22:02:40 +00:00
* Passes to {@link wp_register_sidebar_widget()} after argument list and
* backwards compatibility is complete.
2008-09-19 01:41:18 +00:00
*
2009-03-16 22:02:40 +00:00
* @since 2.2.0
* @uses wp_register_sidebar_widget() Passes the compiled arguments.
*
* @param string|int $name Widget ID.
* @param callback $output_callback Run when widget is called.
* @param string $classname Classname widget option.
* @param mixed $params,... Widget parameters.
2008-09-19 01:41:18 +00:00
*/
2009-03-16 22:02:40 +00:00
function register_sidebar_widget ( $name , $output_callback , $classname = '' ) {
// Compat
if ( is_array ( $name ) ) {
if ( count ( $name ) == 3 )
$name = sprintf ( $name [ 0 ], $name [ 2 ]);
else
$name = $name [ 0 ];
2007-04-26 17:17:30 +00:00
}
2009-03-16 22:02:40 +00:00
$id = sanitize_title ( $name );
$options = array ();
if ( ! empty ( $classname ) && is_string ( $classname ) )
$options [ 'classname' ] = $classname ;
$params = array_slice ( func_get_args (), 2 );
$args = array ( $id , $name , $output_callback , $options );
if ( ! empty ( $params ) )
$args = array_merge ( $args , $params );
2009-03-16 21:44:36 +00:00
2009-03-16 22:02:40 +00:00
call_user_func_array ( 'wp_register_sidebar_widget' , $args );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2009-03-16 22:02:40 +00:00
* Alias of {@link wp_unregister_sidebar_widget()}.
2008-09-19 01:41:18 +00:00
*
2009-03-16 22:02:40 +00:00
* @see wp_unregister_sidebar_widget()
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2009-03-16 22:02:40 +00:00
* @param int|string $id Widget ID.
2008-09-19 01:41:18 +00:00
*/
2009-03-16 22:02:40 +00:00
function unregister_sidebar_widget ( $id ) {
return wp_unregister_sidebar_widget ( $id );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:41:18 +00:00
/**
2009-03-16 22:02:40 +00:00
* Registers widget control callback for customizing options.
2008-09-19 01:41:18 +00:00
*
2009-03-16 22:02:40 +00:00
* Allows $name to be an array that accepts either three elements to grab the
* first element and the third for the name or just uses the first element of
* the array for the name.
*
* Passes to {@link wp_register_widget_control()} after the argument list has
* been compiled.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
*
2009-03-16 22:02:40 +00:00
* @param int|string $name Sidebar ID.
* @param callback $control_callback Widget control callback to display and process form.
* @param int $width Widget width.
* @param int $height Widget height.
2008-09-19 01:41:18 +00:00
*/
2009-03-16 22:02:40 +00:00
function register_widget_control ( $name , $control_callback , $width = '' , $height = '' ) {
// Compat
if ( is_array ( $name ) ) {
if ( count ( $name ) == 3 )
$name = sprintf ( $name [ 0 ], $name [ 2 ]);
else
$name = $name [ 0 ];
}
$id = sanitize_title ( $name );
$options = array ();
if ( ! empty ( $width ) )
$options [ 'width' ] = $width ;
if ( ! empty ( $height ) )
$options [ 'height' ] = $height ;
$params = array_slice ( func_get_args (), 4 );
$args = array ( $id , $name , $control_callback , $options );
if ( ! empty ( $params ) )
$args = array_merge ( $args , $params );
call_user_func_array ( 'wp_register_widget_control' , $args );
2007-04-24 01:05:17 +00:00
}
2008-09-19 01:32:45 +00:00
2008-09-19 01:41:18 +00:00
/**
2009-03-16 22:02:40 +00:00
* Alias of {@link wp_unregister_widget_control()}.
2008-09-19 01:41:18 +00:00
*
* @since 2.2.0
2009-03-16 22:02:40 +00:00
* @see wp_unregister_widget_control()
*
* @param int|string $id Widget ID.
2008-09-19 01:41:18 +00:00
*/
2009-03-16 22:02:40 +00:00
function unregister_widget_control ( $id ) {
return wp_unregister_widget_control ( $id );
2009-04-11 14:37:24 +00:00
}