显示CTP中的列表类别

时间:2018-03-15 作者:Damian

我已经创建了arhcive。php和分类法。php作为我所有CPT的一个模板。现在,我需要显示类别列表(自定义分类法),但只显示当前帖子类型的类别列表。所以我有这样的代码:

<?php wp_list_categories( 
    array(
        \'show_option_all\' => \'wszystkie\',
        \'taxonomy\' => \'drzewa_formowane_categories\',
        \'style\' => \'none\',
        \'separator\' => \'\',
        )); 
?>
现在,我如何将此代码修改为“通用”代码?


正常。我有一个小错误。通常这部分代码工作正常,但当我激活Polylang时,我会在下面的列表中看到我的语言。。。我已经为我的CPT选择了翻译。是否可以只指定范围到CPT分类?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

在分类法归档中,这相当简单,因为您可以通过以下方式获得当前的分类法:

$term_object = get_queried_object();
$taxonomy = $term_object->taxonomy;
在帖子类型归档中,它有点复杂,因为您首先需要标识当前的帖子类型,然后检索附加到该帖子类型的分类法:

$post_type_object = get_queried_object();
$taxonomies = get_object_taxonomies( $post_type_object->name );

if ( ! empty( $taxonomies ) ) {
    $taxonomy = $taxonomies[0];
}
因此,您需要将这些方法与正在查看的内容相结合,以获得当前分类法中的术语列表或与当前帖子类型相关的术语列表:

$taxonomy = null;

if ( is_tax() ) {
    $term_object = get_queried_object();
    $taxonomy = $term_object->taxonomy;
} elseif ( is_post_type_archive() ) {
    $post_type_object = get_queried_object();
    $taxonomies = get_object_taxonomies( $post_type_object->name );

    $taxonomies = array_filter( $taxonomies, function( $taxonomy_name ) {
        return get_taxonomy( $taxonomy_name )->public;
    } );

    if ( ! empty( $taxonomies ) ) {
        $taxonomy = $taxonomies[0];
    }
}

if ( $taxonomy ) {
    wp_list_categories( array(
        \'show_option_all\' => \'wszystkie\',
        \'taxonomy\'        => $taxonomy,
        \'style\'           => \'none\',
        \'separator\'       => \'\',
    ) );
}
编辑:我已将此代码添加到帖子类型存档版本中,以过滤掉任何附加到帖子类型的非公共分类法:

$taxonomies = array_filter( $taxonomies, function( $taxonomy_name ) {
    return get_taxonomy( $taxonomy_name )->public;
} );

结束

相关推荐

GET_CATEGORIES返回顶级类别而不是子类别

我用下面的代码制作了一个基本的子类别导航菜单。问题出在一个类别上(没有子类别),它将顶级类别作为子类别返回,例如:新闻、未分类等(我尝试分配子类别,但它实际上从菜单中消失,而不是修复内容)这可能是什么原因造成的?function display_category_breadcrumbs () { $current_cat_id = get_cat_id( single_cat_title(\"\",false) ); $parent_cats = get_categ