如何使子类别识别父类别的模板显示

时间:2014-05-28 作者:Mayeenul Islam

我正在使用默认的帖子类型post 用于各种用途。为了对它们进行排序,我使用了不同的类别。我正在使用slug首选项设计不同的类别布局,例如:category-book.php, category-notice.php 等等,一切都很好。

但就在刚才发现,父类别“book”的任何子类别都会重定向到index.php (或archive.php, 或category.php) 因为他们无法识别其父类别模板(category-book.php), 因为他们的鼻涕虫是不同的。

如何使子类别识别其父类别的模板设计
我是否必须使用WP_Query() 为了这个?

3 个回复
最合适的回答,由SO网友:Mayeenul Islam 整理而成

感谢@Rarst为我指引了正确的方向。根据他的指示,我在google上搜索了一次又一次,发现了一篇WerdsWords的博客文章,其中有一段非常棒的代码片段,可以过滤到category_template 正如Rarst建议我的,好消息是:这对我的事业起到了作用:

function new_subcategory_hierarchy() { 
    $category = get_queried_object();

    $parent_id = $category->category_parent;

    $templates = array();

    if ( $parent_id == 0 ) {
        // Use default values from get_category_template()
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = \'category.php\';     
    } else {
        // Create replacement $templates array
        $parent = get_category( $parent_id );

        // Current first
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";

        // Parent second
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = \'category.php\'; 
    }
    return locate_template( $templates );
}

add_filter( \'category_template\', \'new_subcategory_hierarchy\' );
文章链接:

SO网友:Rarst

模板层次结构的类别存档分支仅对实际查询的类别进行操作。

如果你看看get_category_template() 它不查找层次结构。

您可以使用category_template 过滤器(从动态命名{$type}_template 根据需要调整选择。

SO网友:Caio Bleggi

作为对@Rarst sugestion的补充,我需要该函数来使用顶级父模板。

function new_subcategory_hierarchy() { 
    $category = get_queried_object();
    $parent_id = $category->category_parent;

    // Create replacement $templates array
    $templates = array();

    if ( $parent_id == 0 ) {
        // Use default values from get_category_template()
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = \'category.php\';     
    } else {
        // Start from the current term
        $parent = get_category($parent_id);
所以我在这里加上:

        // Climb up the hierarchy until we reach a term with parent = \'0\'
        while($parent->parent != \'0\'){
           $term_id = $parent->parent;
           $parent  = get_term_by( \'id\', $term_id, $category->taxonomy);
        }
结束时间:

       // Current first
       $templates[] = "category-{$category->slug}.php";
       $templates[] = "category-{$category->term_id}.php";

       // Parent second
       $templates[] = "category-{$parent->slug}.php";
       $templates[] = "category-{$parent->term_id}.php";
       $templates[] = \'category.php\'; 
  }
  return locate_template( $templates );
}                
add_filter( \'category_template\', \'new_subcategory_hierarchy\' ); 

结束

相关推荐

使用Get_Categories显示类别的图像,或显示任何子帖子中的图像

我正在使用get\\u categories列出父类别的子类别。我想使用get\\u categories输出将图像添加到子类别。我可以从我正在使用get\\u categories的类别的子类别(即父类别的子类别)的任何帖子中获取特色图像。我不想显示任何其他孙儿信息,只想从每组类别的孩子中获得一张特色图片我当前使用的代码是$args = array(\'child_of\' => 1 ); $categories = get_categories($args); forea