Via theme.json or via php
Method 1: theme.json
Create a file in the <you_theme_root>/templates folder matching the custom template name in the code below. For example post-alt.html
.
Place this inside the theme.json file at the root of your theme.
{
"version": 2,
"settings:: {},
"customTemplates": [
{
"name": "post-alt",
"title": "Alt for post",
"postTypes": ["post"]
},
{
"name": "page-or-post-alt",
"title": "Alt for page or post",
"postTypes": ["page", "post"]
}
]
...
}
Code language: PHP (php)
Method 2: Using PHP
Put a file in your theme containing the following (I also place this is my templates folder):
<?php
/*
Template Name: My Custom PHP Template
Template Post Type: page
*/
Code language: HTML, XML (xml)
My use case
I found that the php version was more useful for WP_Query as I could do something like the following (where $post_object_id is the filename of interest). This is filter for posts using the given page template.
$query_args['meta_query'] = [
[
'key' => '_wp_page_template',
'value' => 'templates/' . $post_object_id . '.php',
'compare' => 'IN',
]
];
Code language: PHP (php)
If you know how to do this using the first method I’d be interested to know how.