目标为父类别页面

时间:2016-04-01 作者:Django Reinhardt

我希望为所有父类别和子类别创建不同的模板页。我希望使用层次结构(例如category-parent.phpcategory-sub.php), 但看看我找到的流程图,我认为没有选择:

enter image description here

我可以手动添加category-$slug.php 对于父类别(因为它们不应该改变),然后使用category.php 对于其他所有内容(即子类别),是否有更好的方法?

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

可以使用自定义模板和template_include 滤器category-parent.phpcategory-sub.php 两者都不是必需的。一个可以是category.php 对于父类别和子类别,可以使用custom-category-child.phpcategory-sub.php 为默认层次结构保留。

首先在主题中创建模板文件custom-category-child.phpfunctions.phpUpdate: 正如Pieter建议的那样,我们可以使用category_template 而不是template_include 节省几行。此外,当自定义模板文件丢失时,我们应该返回当前模板!

Read inline comments

add_filter(\'category_template\', \'custom_cat_templates\');
/**
 * Create custom template for child categroies
 * @param type $template
 * @return type
 */
function custom_cat_templates($template) {
    $category = get_category(get_queried_object_id()); //Get the ID for current queried category
    if ( $category->category_parent > 0 ) { //Check if it child category
        $sub_category_template = locate_template(\'custom-category-child.php\'); //return our custom template
        $template = !empty($sub_category_template) ? $sub_category_template : $template; //return default template if custom templaet missing
    }

    return $template;
}

SO网友:Sumeet Shroff

如果在category.php 文件检查类别是否为父类别。如果是,则显示父代码。否则显示子代码。这样,您就不需要为每个类别创建多个文件。

$category = get_term(get_queried_object());

if ( $category->category_parent > 0 ) {
    // Is subcategory
} else {
    // Is parent category
}

SO网友:Pieter Goosen

如果你不想scenic route posted by @Sumit (which IMHO is a better solution) 并且需要在类别模板内执行操作,您可以执行以下操作

获取查询的对象(当前查看的类别)。我们将使用$GLOBALS[\'wp_the_query\']->get_queried_object() 99.9999%可靠,而get_queried_object() 甚至建议get_the_category(). 你可以读我对这个问题的有趣回答here

使用get_term() 要验证术语对象,还可以使用get_category(), 但是很短,get_category() 只是一个包装get_term()

从那里,我们可以获得类别父项并执行我们需要执行的操作

我们可以尝试以下方法:

// Get the current category object
$category_object = get_term( $GLOBALS[\'wp_the_query\']->get_queried_object() );

// Run our logic according to the value of $parent
if ( 0 === $category_object->parent ) {
    // Category is top level
} else {
    // Category is a descendant
}

相关推荐

Custom Taxonomy in REST API

我有两个自定义分类法,用于我的帖子。我正试图从其中一个中检索名称。在REST API V2中,我执行以下操作:https://example.com/wp-json/wp/v2/posts/14340/?_embed=wp:term 这嵌入了所有分类法的实际名称(类别加上我的两个自定义分类法),但我只对与每个帖子相关联的名称感兴趣,只对其中一个自定义分类法感兴趣。响应示例:"_embedded": { "wp:term": [