1

I'm trying to create a custom page 2 template that's different from the main index.php. For example, the main index page would display the latest news + a lot of features like a magazine. When readers click to read on to page 2, 3, 4 etc of the news posts, they are taken to a more regular news page. Kinda like something on theverge.com (at the bottom, click "next page" and see what I mean).

Anyone have any ideas on how to do this? I know it's possible to create archive pages for categories and tags, but I'm not sure how to do it for the index.php.

Thanks!

2

2 Answers 2

3

I would use the is_paged() conditional inside index.php to load two separate templates containing your layouts. Something like this:

if ( is_paged() ):
   get_template_part( 'content', 'first-page' );
else:
   get_template_part( 'content', 'paged' );
endif;

Assuming you have two templates, content-first-page.php and content-paged.php.

Edit: If you just want a different template for part of your index page, try this:

if ( !is_paged() ):
   get_template_part( 'content', 'middle' );    
endif;

Put that wherever you want the extra template to load.

2
  • Thanks man, that seems to have done the job. I don't think the index and subsequent pages are that different, the index page basically has an extra section of content before the footer. Is there a way of including this section (e.g. "middle.php") via php include only on the main index page and not the other pages (page 2, 3, 4 etc.)? Thanks again!
    – Bill
    Jul 2, 2012 at 23:55
  • You can use my code for that purpose with a few modifications. Jul 3, 2012 at 12:09
3

@Joseph's answer is probably what you're after. But if the first and subsequent pages are going to be sufficiently different so as to require a complete different template you can hook into the template_include filter.

add_action('template_include','wpse57122_change_on_p2');
function wpse57122_change_on_p2( $template ){
    if( is_front_page() && is_paged() ){
        $template = locate_template(array('archive.php','index.php'));
    }
    return $template;
}

This alters the default template used for pages 2 and higher of the 'front page' (see is_front_page and is_paged()). The locate_template searches the (child and parent) theme for the given templates - in the order given to it. In this example, it will use archive.php for pages 2 and above- if that template doesn't exist, it will use index.php instead.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.