Custom post template for particular posts

There is no situation ever that just have pro’s, there will always be a con somewhere. Also, I don’t think there is any wrong or right answer here and merely a fact of preference

I think the most important question to ask yourself is: “How is the rest of my structure going to look like”

If you just need to differentiate your posts in single view, your option one would be enough. Going with this option, you can do the following:

  • Create a category for the restaurant posts. Call it something like Restuarants

  • Instead of running a lot of conditional checks in single.php, create a custom single.php for that specific category, say single-restaurants.php

  • Use the single template filter to assign this single template to posts assigned to the Restaurant category

Example of that function

add_filter( 'single_template', function ($single_template) {

     global $post;

    if ( in_category( 'Restaurants' ) ) {
          $single_template = dirname( __FILE__ ) . '/single-restaurants.php';
     }
     return $single_template;

}, 10, 3 );

All posts which belongs to the Restaurants category will now use single-restaurants.php for single view

If you need more control and completely different structures, go with custom post types. Custom post types are excluded from the main query, except on taxonomy pages and custom post type archive pages. So you can have your restaurant posts completely separate from any other posts. Here you can make use of pre_get_posts to add you custom post type to the main query for specific templates

Here is an example to add your custom post type to the home page

add_action( 'pre_get_posts', function ( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {

        $query->set( 'post_type', array( 'post', 'my_post_type' ) );

    }
});

By default, if your post type is names restaurants, you can have a single template called single-restaurants.php, no extra code needed.

You should also have a look at the Template Hierarchy for assistance on how WordPress chooses which templates to use where and how you can manipulate that