Search code examples
wordpress-themingwidgetsidebar

Different sidebars for different pages on Wordpress


I'm trying to design a theme on WordPress (version 3.3.2) but I am having a few problems in having the sidebar display a different set of widgets on certain pages.

I have tried several online tutorials and this one in particular http://www.rvoodoo.com/projects/wordpress/wordpress-tip-different-sidebars-on-different-pages/ but unfortunately there is no change in the sidebar when I move to a different page

I registered two sidebars on my functions.php as shown below, one which I would consider as main, and the other as a custom sidebar, and I also added different widgets to these sidebars.

<?php register_sidebar( //register sidebar
    array(
        'name' => 'Right-side',
        'before_widget' => '<div class="rightwidget">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widgettitle">',
        'after_title' => '</h3>',
        ));


        register_sidebar( //register second sidebar
    array(
        'name' => 'Second-right',
        'before_widget' => '<div class="rightwidget">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widgettitle">',
        'after_title' => '</h3>',
        ));

?>

Following that, I created the files sidebar.php and sidebar-second.php to be able to call them.

sidebar.php

<div id="sidebar">
    <?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar('Right-side')) : ?>
        <h3 class="widget-title">No widget added</h3>
        <p> Please add some widgets</p>

    <?php endif; ?>
    </div><!--ends sidebar-->

sidebar-second.php

 <div id="sidebar">
    <?php if (!function_exists('dynamic_sidebar') || !dynamic_sidebar('Second-right')) : ?>
        <h3 class="widget-title">No widget added</h3>
        <p> Please add some widgets</p>

    <?php endif; ?>
    </div><!--ends sidebar-->

And then I added replace my <?php get_sidebar() ; ?> statement with following conditional

<?php if( is_page('225') ) : ?>
<?php dynamic_sidebar('second'); ?>
<?php else : ?>
<?php get_sidebar() ; ?>
<?php endif ; ?>

However only the widgets added to the sidebar.php are displayed on every page. Any help on how I could change this, or pointers on what I could be doing wrong. Thanks.


Solution

  • I looks like you are using <?php dynamic_sidebar('second'); ?> where you should be using <?php get-sidebar('second'); ?>

    What get_sidebar('foo') does is look for a file named 'sidebar-foo.php' in the root directory of your theme and includes it. dynamic_sidebar('bar'), on the other hand, looks for a sidebar registered with:

    <?php register_sidebar( array( 'name' => 'bar' ... ) ) ?>
    

    Hope this helps!