Alternate post templates

written by: Jeff McNear

One of the fundamental elements of WordPress theming is the ability to create alternative page templates where at the head of the template file you take the standard entry of:

<?php
/**
 * The template for displaying all pages
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other 'pages' on your WordPress site may use a
 * different template.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package pkresearch
 */

get_header(); ?>

and modify it so as to specify the alternate template name like this:

<?php
/**
 * Template Name:Team Page
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other 'pages' on your WordPress site may use a
 * different template.
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package pkresearch
 */

get_header(); ?>

adding the crucial line of: Template Name: Team Page

as well as naming that new file something like page-team.php

Once upon a time you would need to use a plugin to accomplish the same thing with posts … but for the past several years that is no longer required!

The methodology is very similar where you change the standard head of single.php that reads:

<?php
/**
 * The template for displaying all single posts
 * 
 * 
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package 346bg
 */
get_header();
?>

and change it to something like this:

<?php
/**
 * The template for displaying all single posts
 * Template Name: alternative
 * Template Post Type: post
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package 346bg
 */

get_header();
?>

Where the crucial entry consists of two additional lines, the first specifying the template name and the second assigning it to a specific post type

* Template Name: alternative
* Template Post Type: post

and naming the new file something like single-alternative.php

The ability to specify the relevant post type(s) also means that custom post types can have multiple templates!

<?php
/**
 * The template for displaying all single posts
 * Template Name: alternative
 * Template Post Type: artwork_type
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package 346bg
 */

get_header();
?>

and naming the file something like single-artwork_type-alternative.php

It is worth noting that current developments in Gutenberg and full site editing are introducing templating methodology that can be accomplished via the editor itself