Use template_include with custom post types

I want to check for an appropriate template in the theme folder before falling back to the file in my plugin directory. Here’s my code:

add_filter('template_include', 'sermon_template_include');
function sermon_template_include($template) {
    if(get_query_var('post_type') == 'wpfc_sermon') {
        if ( is_archive() || is_search() ) :
           if(file_exists(TEMPLATEDIR . '/archive-wpfc_sermon.php'))
              return TEMPLATEDIR . '/archive-wpfc_sermon.php';
           return dirname(__FILE__) . '/views/archive-wpfc_sermon.php';
        else :
           if(file_exists(TEMPLATEDIR . '/single-wpfc_sermon.php'))
              return TEMPLATEDIR . '/single-wpfc_sermon.php';
           return dirname(__FILE__) . '/views/single-wpfc_sermon.php';
        endif;
    }
    return $template;
}

Problem is, it doesn’t work! 🙂 It always picks the file in my plugin folder. Any idea what to do? I’ve tried alot of variations but I can’t seem to get anything to work!
Thanks in advance!
Jack

Read More

EDIT

I’m expecting the archive-wpfc_sermon.php to be returned from the theme folder if it exists. However, the file from my plugin always gets returned. Thanks for your help! This is from my Sermon Manager plugin available in the repository.

Related posts

Leave a Reply

2 comments

  1. I am not sure if this will work for you but it is worth a shot. I use this all the time for my custom post types when they require a special template.

    // Template selection Defines the template for the custom post types.
    function my_template_redirect()
      {
      global $wp;
      global $wp_query;
      if ($wp->query_vars["post_type"] == "your_custom_post_type")
      {
        // Let's look for the your_custom_post_type_template.php template 
       // file in the current theme
        if (have_posts())
          {
              include(TEMPLATEPATH . '/your_custom_post_type_template.php');
              die();
          }
          else
          {
              $wp_query->is_404 = true;
          }
        }
    }
    

    All you have to do is add this script in your functions.php file and put the template file in your theme directory.

    This could be worth a shot and may not cause conflict with your plugin. However I am not sure of that.

    I forgot … dont forget to add the action. 🙂

    add_action("template_redirect", 'my_template_redirect');