尝试管理包含大量自定义分类的博客上的模板

时间:2017-04-21 作者:Johansson

在我最近的项目中,我正在处理一个网站,该网站包括数十种自定义分类法、两种帖子类型、内容等,并且需要为不同的作者或标记使用不同的模板。

现在,我的模板文件夹有大约70个用于模板的php文件,这真是令人困惑。

我注意到一些主题(如twentyseven)将模板文件存储在文件夹中,并在循环中调用它们,如下所示:

get_template_part( \'template-parts/post/content\', get_post_format() );

但这是在循环中。我的模板完全不同,所以我不能使用上面的解决方案,因为我需要使用条件来修改任何不属于循环的内容。

例如,如果我有3种帖子类型,我必须保存3个模板文件:

single-type1.php, single-type2.phpsingle-type3.php.

这些模板在循环内外都是完全不同的(甚至是不同的侧栏),所以我不能只做一个single.php 并在循环中调用适当的post类型。

除了将自定义模板文件直接保存在主题文件夹中之外,还有其他方法可以解决WordPress的自定义模板文件问题吗?

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

页面模板可以存储在page-templatestemplates 主题中的子目录,但这不适用于自定义帖子类型或分类模板。

幸运的是template_include 过滤器可用于更改将加载的模板。在下面的示例中,模板文件存储在/theme-name/templates/ 目录

/**
 * Filters the path of the current template before including it.
 * @param string $template The path of the template to include.
 */
add_filter( \'template_include\', \'wpse_template_include\' );
function wpse_template_include( $template ) {
    // Handle taxonomy templates.
    $taxonomy = get_query_var( \'taxonomy\' );
    if ( is_tax() && $taxonomy ) {
        $file = get_theme_file_path() . \'/templates/taxonomy-\' . $taxonomy . \'.php\';
        if ( file_exists( $file ) ) {
            $template = $file;
        }           
    }


    // Handle post type archives and singular templates.
    $post_type = get_post_type();
    if ( ! $post_type ) {
        return $template;
    }

    if ( is_archive() ) {
        $file = get_theme_file_path() . \'/templates/archive-\' . $post_type . \'.php\';
        if ( file_exists( $file ) ) {
            $template = $file;
        }
    }

    if ( is_singular() ) {
        $file = get_theme_file_path() . \'/templates/single-\' . $post_type . \'.php\';
        if ( file_exists( $file ) ) {
            $template = $file;
        }
    }

    return $template;
}

SO网友:Dev

您可以对所有分类法使用一个模板,并将其命名为taxonomy。php或在函数文件中使用template\\u include。

add_filter( \'template_include\', \'tax_page_template\', 99 );

function tax_page_template( $template ) {

    if ( is_tax( \'taxonomy\' )  ) {
        $new_template = locate_template( array( \'your-tax.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}
根据使用的主题,您还可以在页面属性>模板下拉菜单中使用1个模板,并使用主题设置修改每个模板。

相关推荐

Custom term templates

所以,我在网上做了一些研究,但没有找到可靠的答案,所以我来了。我需要为特定类别创建自定义woocommerce类别页面。例如,我有一个类别叫做“Awesome”。而不是使用由短代码生成的常规类别页面[product_category category=\"something\"], 我想为自定义特定类别页面Awesome.我发现我需要编辑taxonomy-product_cat.php 但我不知道如何将其链接到名为awesome.换句话说,我正在考虑制作php文件的自定义副本,然后将其添加为主题templ