将TEMPLATE_INCLUDE用于自定义帖子类型

时间:2011-10-28 作者:Jack

在返回到插件目录中的文件之前,我想在主题文件夹中检查适当的模板。这是我的代码:

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;
}
问题是,它不起作用!:-)它总是选择我的插件文件夹中的文件。知道怎么做吗?我尝试了很多变化,但似乎什么都没用!提前感谢!千斤顶

EDIT

我期待着archive-wpfc\\U布道。php将从主题文件夹(如果存在)返回。然而,我的插件中的文件总是会被返回。谢谢你的帮助!这是存储库中可用的我的Sermon Manager插件。

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

因此,我不确定问题的确切原因,但您可以尝试以下方法:

  1. Plugin file path: 代替dirname(__FILE__) 具有plugin_dir_path( __FILE__ )
  2. Theme file path: 代替TEMPLATEDIR 具有get_stylesheet_directory()
问题可能来自直接引用常量。

SO网友:Nicole

我不确定这是否对你有用,但值得一试。当我的自定义帖子类型需要特殊模板时,我会一直使用它。

// 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;
      }
    }
}
您所要做的就是在函数中添加此脚本。php文件,并将模板文件放在主题目录中。

这可能值得一试,并且可能不会与您的插件发生冲突。然而,我不能肯定这一点。

I forgot ... dont forget to add the action. :)

add_action("template_redirect", \'my_template_redirect\');

结束

相关推荐