将template_include与自定义帖子类型一起使用


11

我想先检查主题文件夹中的模板,然后再回到插件目录中的文件。这是我的代码:

add_filter('template_include','sermon_template_include');
函数sermon_template_include($ template){
    if(get_query_var('post_type')=='wpfc_sermon'){
        如果(is_archive()|| is_search()):
           if(file_exists(TEMPLATEDIR。'/archive-wpfc_sermon.php'))
              返回TEMPLATEDIR。'/archive-wpfc_sermon.php';
           返回目录名(__FILE__)。'/views/archive-wpfc_sermon.php';
        其他:
           if(file_exists(TEMPLATEDIR。'/single-wpfc_sermon.php'))
              返回TEMPLATEDIR。'/single-wpfc_sermon.php';
           返回目录名(__FILE__)。'/views/single-wpfc_sermon.php';
        万一;
    }
    返回$ template;
}

问题是,它不起作用!:-)它总是在我的插件文件夹中选择文件。知道该怎么办吗?我已经尝试了很多变化,但是似乎什么也无法工作!提前致谢!插口

编辑

我期望从主题文件夹返回archive-wpfc_sermon.php(如果存在)。但是,总是会返回我插件中的文件。谢谢你的帮助!这来自我的资料库中的Sermon Manager插件。


相反,当您期望返回插件模板文件时,将返回哪个主题模板文件?
Chip Bennett

我期望从主题文件夹返回archive-wpfc_sermon.php(如果存在)。但是,总是会返回我插件中的文件。感谢您的帮助@ChipBennett!这来自我的资料库中的Sermon Manager插件。
杰克

Answers:



0

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

// 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;
      }
    }
}

您所要做的就是将该脚本添加到functions.php文件中,并将模板文件放入主题目录中。

这可能值得一试,并且可能不会与您的插件发生冲突。但是我不确定。

我忘记了...不要忘记添加操作。:)

add_action("template_redirect", 'my_template_redirect');

感谢@Nicole,我发布的代码非常适合调用我的模板文件。但是,我想先在当前主题文件夹中扫描同名文件,然后再将其加载到插件文件夹中。
杰克

@Jack,所以基本上,它现在从主题目录中模板之前的插件目录中调用您的文件?嗯,将不得不再考虑这一点。:DI爱一个很好的挑战!
妮可(Nicole)

那就对了!真的让我感到难过。
杰克

@杰克,这听起来像是一个愚蠢的问题,请原谅我。:)您发布的代码是在插件中还是在functions.php文件中?
妮可

@Jack上面的代码从您的主题目录中检索模板文件。您可以使用if语句来检查'include'是否起作用,否则,尝试从插件目录中检索模板。
史蒂芬·哈里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.