子文件夹中的自定义邮政类型档案

时间:2013-10-23 作者:benedict_w

我在Wordpress主题中有一个子目录(有很多页面,我想要一个更合理的结构)。我有一个称为“条目”的自定义帖子类型,但如果我放置归档条目。php模板在我的子目录中,它不再由主题拾取。

有没有办法将自定义的帖子类型存档模板放在子目录中?

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

与页面模板不同,WordPress不在子目录中查找post模板页面。用于定位此类模板的基本函数是locate_template() (参见source), 它查找主题(和父主题)的根目录。

(另一方面get_page_templates() 搜索子目录)

您可以使用template_include filter(过滤模板的绝对路径)更改使用的模板:

add_filter( \'template_include\', \'wpse119820_use_different_template\' );
function wpse119820_use_different_template( $template ){

   if( is_post_type_archive( \'entry\' ) ){
       //"Entry" Post type archive. Find template in sub-dir. Look in child then parent theme

       if( $_template = locate_template( \'my-sub-dir/archive-entry.php\' ) ){
            //Template found, - use that
            $template = $_template;
       }
   }            


   return $template;
}

SO网友:s_ha_dum

正如@StephenHarris所解释的,模板加载器在默认情况下不会这样做。

虽然斯蒂芬的回答在我看来很好,但在他发帖之前,我正在做一个,这有点不同。我用了archive_template 钩子并使用生成模板名称get_queried_object.

add_action(
  \'archive_template\',
  function($template) {
    $path = pathinfo($template);
    if (!empty($path[\'filename\'] && \'archive\' === $path[\'filename\']) {
      $pg = get_queried_object();
      if (!empty($pg->name)) {
        $t = locate_template(\'archive/\'.$pg->name.\'.php\');
        if (!empty($t)) {
          $template = $t;
        }
      }
    }
    return $template;
  }
);
这是粗略的代码。可能是马车。

结束

相关推荐

BloInfo(‘style heet_directory’)vs.get_style heet_directory_uri()和Include(‘file.php’)vs.get_模板_part()

在我使用的自定义主题中<img src=\"<?php bloginfo(\'stylesheet_directory\'); ?>/images/logo.jpg\"/> 加载我的自定义徽标。我正在使用自定义侧栏front-page.php 这就是为什么我用<?php include(\'sidebar-front.php\') ?> 为了得到它。但当我使用“主题检查”插件时,建议更改以下内容:bloginfo(\'stylesheet_directory\') 到g

子文件夹中的自定义邮政类型档案 - 小码农CODE - 行之有效找到问题解决它

子文件夹中的自定义邮政类型档案

时间:2013-10-23 作者:benedict_w

我在Wordpress主题中有一个子目录(有很多页面,我想要一个更合理的结构)。我有一个称为“条目”的自定义帖子类型,但如果我放置归档条目。php模板在我的子目录中,它不再由主题拾取。

有没有办法将自定义的帖子类型存档模板放在子目录中?

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

与页面模板不同,WordPress不在子目录中查找post模板页面。用于定位此类模板的基本函数是locate_template() (参见source), 它查找主题(和父主题)的根目录。

(另一方面get_page_templates() 搜索子目录)

您可以使用template_include filter(过滤模板的绝对路径)更改使用的模板:

add_filter( \'template_include\', \'wpse119820_use_different_template\' );
function wpse119820_use_different_template( $template ){

   if( is_post_type_archive( \'entry\' ) ){
       //"Entry" Post type archive. Find template in sub-dir. Look in child then parent theme

       if( $_template = locate_template( \'my-sub-dir/archive-entry.php\' ) ){
            //Template found, - use that
            $template = $_template;
       }
   }            


   return $template;
}

SO网友:s_ha_dum

正如@StephenHarris所解释的,模板加载器在默认情况下不会这样做。

虽然斯蒂芬的回答在我看来很好,但在他发帖之前,我正在做一个,这有点不同。我用了archive_template 钩子并使用生成模板名称get_queried_object.

add_action(
  \'archive_template\',
  function($template) {
    $path = pathinfo($template);
    if (!empty($path[\'filename\'] && \'archive\' === $path[\'filename\']) {
      $pg = get_queried_object();
      if (!empty($pg->name)) {
        $t = locate_template(\'archive/\'.$pg->name.\'.php\');
        if (!empty($t)) {
          $template = $t;
        }
      }
    }
    return $template;
  }
);
这是粗略的代码。可能是马车。

相关推荐

子主题的GET_STYLESET_DIRECTORY()与GET_TEMPLATE_DIRECTORY()的比较

假设我的父主题文件夹中有以下文件:\'theme-folder/inc/custom.php\'然后我创建了一个儿童主题。如何检查该文件是否存在于子主题中,然后获取它,否则从父主题获取它?get_template_directory() 始终从父主题获取文件。虽然get_stylesheet_directory() 要求文件存在于子主题中。