Question

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

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top