Templating of a specific post ID

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

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x