Creating custom blog page template the right way

I want to create a new custom page template for the presentation of blog posts. I realise that when you assign a page to display posts via Settings > Reading, it then will assign home.php to display that page content – being posts on a page. Also the option to assign a page template in the page editing view disappears.

Right now it displays a default article by article view. I want to provide another option for admin to select a different template which could style the blogs in a gird or masonry layout. I’m not sure how to do this.

I could do it by not assigning the page to display blogs in the Settings > Reading admin area and then allowing admin user to assign the specific template to page using Page Attributes menu in page editing but according to https://make.wordpress.org/themes/2014/06/28/correct-handling-of-static-front-page-and-custom-blog-posts-index-template/, this is the WRONG way.

I’ve tried google searching for solutions but all I keep finding is recommendations for plugins to use. Could someone point me to some helpful resources?

3

Don’t forget that WordPress was primarily designed to be a blogging CMS, so when it comes to theme development, developers often opt for a non-standard approach in exchange for the potential for more features.

Theme developers have three options when they approach this, one of which (#2 below) you mentioned.

  1. Directly edit the index.php to modify the blog index. This is not a good option because index.php should be the a fallback in case another part of your template is missing.

    • Pros: fast and easy
    • Cons: error prone and against object oriented principles
  2. Create a page template for the blog index. Like you said, many theme developers elect to go this route because it’s a fast way to give you control over the blog index, and it actually gives you the ability to play around with different blog index templates (which is useful when developing a versatile theme).

    • Pros: Versatile, allows for building a robust theme
    • Cons: you lose the ability to call WordPress’ native functionality that pertains to the blog index.
  3. Create a front-page.php, home.php and index.php in your theme. The front-page will be the home page for the theme. home will default to your blog index and index will be your fallback for all templates.

    • Pros: Clean and makes full use of WordPress’ native objects and methods
    • Cons: Limited by WordPress: not ideal for many of the kinds of option-rich themes you see today

Personally I like to go with #2, because most of my WordPress development projects these days are not just blogs: they’re entire sites with deep information architecture and complex interactivity.

Leave a Comment