Site icon Hip-Hop Website Design and Development

Templates for hierarchical custom post type

I’m a bit confused with templates for custom post types defined as hierarchical. I’ve got a CPT set to hierarchical, not strictly in order to have a nested hierarchy, but so that they can be ordered by the Simple Page Ordering plugin. Here’s the code:

register_post_type(
    'case_study', array(
        'label'                 => _x( 'case studies', 'post type plural name' ),
        'labels'                => array(
            'name'                  => _x( 'Case studies', 'post type general name' ),
            'singular_name'         => _x( 'Case study', 'post type singular name' ),
            'menu_name'             => _x( 'Case studies', 'admin menu' ),
            'name_admin_bar'        => _x( 'Case study', 'add new on admin bar' ),
            'add_new'               => _x( 'Add New', 'case study' ),
            'add_new_item'          => __( 'Add New Case study' ),
            'new_item'              => __( 'New Case study' ),
            'edit_item'             => __( 'Edit Case study' ),
            'view_item'             => __( 'View Case study' ),
            'all_items'             => __( 'All Case studies' ),
            'search_items'          => __( 'Search Case studies' ),
            'parent_item_colon'     => __( 'Parent Case studies:' ),
            'not_found'             => __( 'No Case studies found.' ),
            'not_found_in_trash'    => __( 'No Case studies found in Trash.' )
        ),
        'public'                => true,
        'publicly_queryable'    => true,
        'show_ui'               => true,
        'show_in_nav_menus'     => true,
        'show_in_menu'          => true,
        'show_in_admin_bar'     => true,
        'menu_position'         => 20, // Below Pages
        'menu_icon'             => 'dashicons-clipboard', // @link https://developer.wordpress.org/resource/dashicons/
        'query_var'             => false,
        'rewrite'               => array( 'slug' => 'case-study', 'with_front' => false ),
        'capability_type'       => 'case_study',
        'map_meta_cap'          => false,
        'capabilities' => array(
            'publish_posts'         => 'publish_case_studies',
            'edit_posts'            => 'edit_case_studies',
            'edit_others_posts'     => 'edit_others_case_studies',
            'delete_posts'          => 'delete_case_studies',
            'delete_others_posts'   => 'delete_others_case_studies',
            'read_private_posts'    => 'read_private_case_studies',
            'edit_post'             => 'edit_case_study',
            'delete_post'           => 'delete_case_study',
            'read_post'             => 'read_case_study',
        ),
        'has_archive'           => false,
        'hierarchical'          => true, // Set to true to allow ordering
        'supports'              => array( 'title', 'editor', 'custom-fields', 'thumbnail', 'revisions', 'pilau-author' ),
        'taxonomies'            => array( 'topic' ),
    )
);

By default a hierarchical CPT uses the page.php template instead of single.php – which took me a while to realise, but it makes sense.

However, now I want to create a template specifically for this CPT, and single-case_study.php doesn’t work. Neither does page-case_study.php.

How do you create a template specifically for a hierarchical CPT?