如何使用不同的模板显示WordPress的父类别和子类别?

时间:2014-12-30 作者:Arif

我目前正在尝试做一个目录风格的网站,我目前有父类别和子类别。

现在,我已经显示了父类别,当单击父类别链接时,我正在使用category.php 显示子类别列表。

现在我想知道,当点击子类别链接时,WordPress会显示该子类别中的所有帖子。

是否有条件语句或方法可以让子类别转到archive.php 所以它可以显示其他内容?

现在,父类别和子类别从category.php, 所以它们最终是同一页。

2 个回复
SO网友:Robert hue

有两种方法可以做到这一点。

通过检查类别/子类别的深度。如果我们正在浏览主/父类别,则显示自定义模板;如果我们在子类别上,则显示另一个模板,然后继续category.php 模板您应该使用哪种方法取决于您的项目要求。在这里,我将解释第一个,因为它非常灵活,我认为会适合您的目的。

WordPress拥有template_include 在WordPress之前立即执行的函数包括预定的模板文件。这可以用来覆盖WordPress的默认模板行为。

function wpse_template_check( $template ) {
    if ( is_category() ) {
        // Get category information
        $cat = get_query_var( \'cat\' );
        $cats_str = get_category_parents( $cat, false, \'%#%\' );
        $cats_array = explode(\'%#%\', $cats_str);
        $cat_depth = sizeof( $cats_array )-2;

        // Check category depth
        $new_template = locate_template( array( \'category-custom-template.php\' ) );
        if ( $cat_depth == 0 && \'\' != $new_template ) {
            return $new_template;
        }
    }
    return $template;
}
add_filter( \'template_include\', \'wpse_template_check\' );
此函数计算类别深度并检查当前类别是否为主/父类别。如果为true且类别模板存在,则将类别模板替换为category-custom-template.php.

我已经测试了它,它正在工作,但您应该注意,它是基于类别深度的,所以所有父类别都将具有相同的自定义模板。

尽管您可以自定义此功能以执行更多操作并满足您的需求。

SO网友:Pieter Goosen

我想我明白你的意思了。默认情况下,单击类别并将您定向到类别页面时,将显示当前类别及其所有子类别中的帖子

这是默认情况下构建类别页面的方式。主查询(也使用WP_Query) 使用tax_query 从db调用类别和分类归档页面上的帖子。A.tax_query 在分类页面和分类页面上完全相同,实际上内置分类之间没有区别category 和自定义分类法。看见this post 以获取解释。

默认情况下,如果您查看tax_query, 这个include_children 参数设置为true,这意味着还包括所查询的当前术语的子术语。所以,基本上只需要将此参数设置为false。要实现这一点,您需要使用parse_tax_query 滤器

您可以在函数中简单地执行类似的操作。php文件(需要php 5.3+

add_filter( \'parse_tax_query\', function ( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_category() ) {

        $query->tax_query->queries[0][\'include_children\'] = 0;

    }
}
这将确保在单击某个类别时,它只显示该特定类别中的帖子,而不显示其子类别中的帖子

结束

相关推荐

List all blog categories

我已经创建了一个博客插件。我的博客中有博客类别。我想获得所有博客类别的列表,并将其列在我的www.domain中。com/blogs/page。我的博客类别名称为“blogcategory”。我不知道如何在list-category 作用我是wordpress开发的nooby。