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.