[wp-hackers] Extending WP_Widget_Factory
Timothy Wood
codearachnid at gmail.com
Mon Apr 23 17:51:50 UTC 2012
I ran into an issue recently where I needed to make multiple calls of
register_widget on the same class and have multiple unique widgets
registered. The problem I ran into is that every time the same class
is called it will overwrite the last instance of the same class during
the widget constructor request parent::__construct('unique_id',
'widget title'); After pouring through the /wp-includes/widgets.php
code I found that if I were to extend the register method to pass
through arguments into the extended WP_Widget constructor that I can
reuse the same class for multiple widget registations. Currently I am
directly bypassing the register_widget(); method to extend the
WP_Widget_Factory class directly and instantiating it through a loop.
Here is a sample of what I am suggestion for extension of the widget
factory and that this would also be added into the register_widget()
method as a secondary argument.
class Extend_WP_Widget_Factory extends WP_Widget_Factory {
// Overload register($widget_class) with ability to pass parameters
into widgets
function register($widget_class, $param = null) {
$this->widgets[$widget_class] = new $widget_class($param);
}
}
class Extend_Widget_Builder_Display extends WP_Widget {
function Extend_Widget_Builder_Display($param = null) {
extract($param);
$widget_ops = array( 'classname' => 'widge_' . $UniqueID);
$control_ops = array( 'id_base' => 'widget_' . $UniqueID );
parent::__construct( 'widget_' . $UniqueID, __($UniqueID,
'unique_domain'), $widget_ops, $control_ops );
}
}
Does anyone see why this wouldn't be a good idea to add into core as a
default option?
More information about the wp-hackers
mailing list