I’m creating a multisite network and I am looking for a way to have it so new blogs that are created have a couple of standard pages set up automatically.

The purpose of these pages will be to display universal membership options and other info that I want each site to display.

So, for example, I want each new site to have a “Join” page and an “About this Network” page, and I don’t want to have to manually set up the pages and their custom templates.

I’m using Twentyeleven as my child theme base and customizing a specific theme to be used by each of the newly created sub blogs users.

I guess a part of this question is: is it possible to hardcode pages into a WordPress theme?

Thanks very much.

JW

1 Answer
1

Hook into wpmu_new_blog and create your pages:

add_action('wpmu_new_blog', 'create_my_pages', 10, 2);

function create_my_pages($blog_id, $user_id){
  switch_to_blog($blog_id);

  // not really need, new blogs shouldn't have any content
  if(get_page_by_title('About this Network')) return;

  // create each page
  $page_id = wp_insert_post(array(
    'post_title'     => 'About this Network',
    'post_name'      => 'about-this-network',
    'post_content'   => 'Co za asy...',
    'post_status'    => 'publish',
    'post_author'    => $user_id, // or "1" (super-admin?)
    'post_type'      => 'page',
    'menu_order'     => 666,
    'comment_status' => 'closed',
    'ping_status'    => 'closed',
     // + see: http://codex.wordpress.org/Function_Reference/wp_insert_post
  ));  

  restore_current_blog();
}

You could put this inside a plugin that you network activate, or a must-use plugin, this way they are available in all themes.

Another way is to use template_redirect hook and include your own template files

Leave a Reply

Your email address will not be published. Required fields are marked *