My custom plugin creates a custom post type, and I want to theme my own "single-my_custom_cpt.php" file. However, I want to store it in my plugin folder, and allow that it be over-written in the websites' active theme folder.

For example, single-my_custom_cpt.php exists in /plugins/my-plugin/ folder, and someone creates /themes/site-theme/single-my_custom_cpt.php. I want the theme file to come up first, and if it's deleted, the plugin file to come up.


1 Answer 1


To provide a default template that can be overwritten by a theme hook into template_include like the linked questions suggest. You get the template WordPress wants to use as a parameter. If that is not the file you want – replace it with your plugin’s file:

add_filter( 'template_include', 'wpse_57232_render_cpt', 100 );

 * Provide fall back template file for a custom post type single view.
 * @return void
function wpse_57232_render_cpt( $template )
    // Our custom post type.
    $post_type = 'my_custom_cpt';

    // WordPress has already found the correct template in the theme.
    if ( FALSE !== strpos( $template, "/single-$post_type.php" ) )
        // return the template in theme  
        return $template;

    // Send our plugin file.
    if ( is_singular() && $post_type === get_post_type( $GLOBALS['post'] ) )
        // return plugin file
        return dirname( __FILE__ ) . "/single-$post_type.php";

    // Not our post type single view.
    return $template;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.