Call sidebar from a template

The question:

I need to call a sidebar into my header. I’ve switched to the new twenty twelve theme and created my own child theme. With this new theme I decided to keep things organised and together, so I put my widgets functions, stylesheet and two new sidebar templates (one for header and one for footer widgets) in one folder called pgwidgets.

This is the call i used in my header

<? if ( is_front_page() ) : ?>  
<?php get_sidebar( 'homepage' ) ; ?>
<?php endif ; ?>

This calls the sidebar-homepage.php file into my header from the themes’ root directory. How do I change the get_sidebar( 'homepage' ) part to call the sidebar from the pgwidgets folderfolder (pgwidgets/sidebar-homepage.php)

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Impossible with get_sidebar().

From that function’s body:

function get_sidebar( $name = null ) {
    do_action( 'get_sidebar', $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "sidebar-{$name}.php";

    $templates[] = 'sidebar.php';

So if you pass a $name or any other custom value to the function, they will be set between two fixed strings.

You can use locate_template() instead:

locate_template( 'pgwidgets/sidebar-homepage.php', TRUE );

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment