I’d like to know it’s possible to do something like this
single-post-45.php
I needn the post(45) only to have a custom template.
I know we can achieve this with page, like this
page-45.php
or by a templating file template-test.php
But I can’t find if it’s possible to do this with simple post (following the wordpress hierarchie, i think it’s not possible)
https://www.lafabriquedunet.fr/wp-content/uploads/2018/02/templates-wordpress-hierarchie.jpg
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You have to follow this file name structure:
single-{post-type}-{slug}.php
If you have a post names “Hello World” and the slug of post is hello-world then the template name will be single-post-hello-world.php
Update:
There is no default way to use id in template name. But you might try this snipped:
<?php
add_filter( 'single_template', 'load_post_template_by_id' );
function load_post_template_by_id( $single_template ) {
global $post;
if ( 'post' === $post->post_type) {
$tmp_template = dirname( __FILE__ ) . '/single-post-'.$post->ID.'.php';
if ( file_exists( $tmp_template ) ) {
$single_template = $tmp_template;
}
}
return $single_template;
}
Here I’m overriding the post template in a tricky way. Now if you have a post with id 42 and you have a template file named single-post-42.php then it should load automatically.
I didn’t test the code. So use it with your own risk.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0