≡ Menu

Thesis 1.8.x – Master Header and Stylesheet for Thesis Multisite

So I recently started playing around with WP Multisite to get ready for a project I’ll be doing down the road.  With Thesis 1.8.4 they’ve added better support for multisite, but there were a few things that were missing for my purposes.

Basically the model I’ve been testing is an organization site where each user has their own sub-site where they can put up various information, post their own blog etc.

site.com
site.com/user-1
site.com/user-2
etc.

So to that effect I want to keep the overall design and nav elements the same.  This is where Thesis doesn’t handle things automatically.  With 1.8.4 Thesis gives you a master control custom_functions.php so you can change aspects of your entire network in one shot (wicked!) however, the master custom.css does not affect all the network sites.

So I had to re-add the master custom.css file back into each of the sites.

function master_thesis_custom_stylesheet() {
    $handle = 'master_custom';
    $src = get_stylesheet_directory_uri() . '/custom/custom.css';
    $media = 'screen, projection';
    wp_register_style($handle, $src, $deps, false, $media);
    wp_enqueue_style($handle);
}
add_action('wp_enqueue_scripts', 'master_thesis_custom_stylesheet');

My next step was to change the header of all sites to be the same as the base site.  This I accomplished by using the same code Thesis uses to generate the header, with one subtle difference.

function master_thesis_default_header() {
    thesis_hook_before_title();
    switch_to_blog(1);
    thesis_title_and_tagline();
    restore_current_blog();
    thesis_hook_after_title();
}
remove_action('thesis_hook_header', 'thesis_default_header');
add_action('thesis_hook_header', 'master_thesis_default_header');

The switch_to_blog() function temporarily switches all details of the site (with some exceptions) to the master site and the restore_current_blog() changes it back to the current one.  That way the site name, url etc. that the thesis_title_and_tagline() function uses is from the master site.

Finally, using the same technique as I did with the header I added in a master nav menu* to the site:

function master_thesis_nav_menu() {
    switch_to_blog(1);
    thesis_nav_menu();
    restore_current_blog();
}
remove_action('thesis_hook_before_header', 'thesis_nav_menu');
add_action('thesis_hook_before_header', 'master_thesis_nav_menu');

If you’re after a left nav instead:

function master_left_menu() {
    switch_to_blog(1);
    echo "<li id=\"nav_menu-main\" class=\"widget widget_nav_menu\">\n";
    wp_nav_menu(array('menu' => 'Left Nav','menu_class' => 'menu','container' => 'div'));
    echo "</li>\n";
    restore_current_blog();
}
add_action('thesis_hook_before_sidebar_1', 'master_left_menu');

* You need to create the menu as a wp_menu in the base site first.

Comments on this entry are closed.