[wp-trac] [WordPress Trac] #9952: Unregistering default widgets is
not backwards compatible
WordPress Trac
wp-trac at lists.automattic.com
Wed May 27 21:04:55 GMT 2009
#9952: Unregistering default widgets is not backwards compatible
--------------------------+-------------------------------------------------
Reporter: mtdewvirus | Owner: azaozz
Type: defect (bug) | Status: new
Priority: normal | Milestone: 2.8
Component: Widgets | Version: 2.8
Severity: normal | Keywords: widgets
--------------------------+-------------------------------------------------
Themes and plugins use wp_unregister_sidebar_widget to remove default
widgets and then register their own with register_sidebar_widget. Default
widgets have been updated to use WP_Widget, so they do not get
unregistered.
As an example...
{{{
function sapphire_widgets_init() {
register_sidebars(1, array(
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>'
));
function widget_sapphire_pages($args) {
extract( $args );
$options = get_option( 'widget_pages' );
$title = empty( $options['title'] ) ? __( 'Pages' ) :
apply_filters('widget_title', $options['title']);
$sortby = empty( $options['sortby'] ) ? 'menu_order' :
$options['sortby'];
$exclude = empty( $options['exclude'] ) ? '' :
$options['exclude'];
if ( $sortby == 'menu_order' ) {
$sortby = 'menu_order, post_title';
}
$out = wp_list_pages( array('title_li' => '', 'echo' => 0,
'sort_column' => $sortby, 'exclude' => $exclude) );
echo $before_widget;
echo $before_title . $title . $after_title;
?>
<ul>
<li class="page_item"><a href="<?php
bloginfo('url'); ?>">Home</a></li>
<?php echo $out; ?>
</ul>
<?php
echo $after_widget;
}
unregister_sidebar_widget('pages');
unregister_widget_control('pages');
wp_register_sidebar_widget('pages', __('Pages'),
'widget_sapphire_pages', null, 'pages');
wp_register_widget_control('pages', __('Pages'),
'wp_widget_pages_control' );
}
add_action('widgets_init', 'sapphire_widgets_init');
}}}
When an action runs this on widgets_init the default Pages widget is not
removed. The Widgets screen will display both Pages widgets but only one
of them will work because both the default widget and the new widget are
using the same id.
--
Ticket URL: <http://core.trac.wordpress.org/ticket/9952>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list