[wp-trac] Re: [WordPress Trac] #4280: Allow to constrain widgets
being displayed on certain page types only
WordPress Trac
wp-trac at lists.automattic.com
Thu Jul 3 15:20:57 GMT 2008
#4280: Allow to constrain widgets being displayed on certain page types only
-------------------------------------+--------------------------------------
Reporter: torbens | Owner: mufasa
Type: enhancement | Status: reopened
Priority: normal | Milestone: 2.7
Component: Administration | Version: 2.2
Severity: normal | Resolution:
Keywords: has-patch needs-testing |
-------------------------------------+--------------------------------------
Comment (by DD32):
A new theme i'm designing will work best with blog related widgets only
showing on the blog pages, and certain other widgets on pages & the
homepage, The way i've achieved it for myself is to register multiple
sidebars;
for example: "Left Post Sidebar" & "Left Homepage Sidebar".
{{{
in theme's function.php:
add_action('init', 'theme_sidebars');
function theme_sidebars() {
register_sidebar(array(
'name' => 'Left Posts sidebar',
'id' => 'left-posts-sidebar'
));
register_sidebar(array(
'name' => 'Left Home sidebar',
'id' => 'left-home-sidebar'
));
}
in sidebar.php:
$sidebar = is_home() ?
'left-posts-sidebar' :
'left-home-sidebar';
dynamic_sidebar($sidebar);
}}}
Thats all good, Except I now have the problem of certain widgets being
tied to only being on one sidebar(ie. Meta & search).
So, In order to achieve that, I added this to my themes functions.php:
{{{
add_filter('option_sidebars_widgets', 'theme_filter_active_widgets');
function theme_filter_active_widgets($value){
global $sidebar, $theme_widget_backup;
if ( ! empty($sidebar) && is_admin() ) {
foreach ( (array)$value as $key => $bar ) {
if ( $key != $sidebar ) {
$theme_widget_backup[ $key ] = $bar;
$value[$key] = array();
}
}
}
return $value;
}
add_filter('pre_update_option_sidebars_widgets',
'theme_filter_active_widgets_update');
function theme_filter_active_widgets_update($newvalue){
global $theme_widget_backup;
if( ! empty($theme_widget_backup) )
foreach( (array)$theme_widget_backup as $key => $value )
$newvalue[$key] = array_merge(
(array)$newvalue[$key], $value);
return $newvalue;
}
}}}
In short, It hides whats on the other sidebars from the widgets admin,
Allowing me to add widgets to multiple sidebars without any trouble, I
could've rewritten the widgets from scratch, but that seemed a waste of
time. (Note: The update filter is from a patch i just submited: #7233)
Its not the best solution, But it sure beats having checkbox's on every
widget :)
So for the UI, What i thought of was each sidebar having another drop down
below it, Selecting the "View" that the widgets will belong to, eg,
"Posts", "Post", "Homepage", etc..
--
Ticket URL: <http://trac.wordpress.org/ticket/4280#comment:39>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list