是否仅在单个帖子上显示最深类别?

时间:2011-02-26 作者:peroyomas

我想显示给定帖子的直接类别祖先。一个示例:

以下是我的分类:

第1类。1类。1.1第2类。1.2第二类。2类。2.1第2类。2.2

  • 第2类。3、我只将帖子放在同一“级别”之间的单个类别中,但当类别有更多子类别时,我会检查整个尾随,如:

    第1类。1类。1.1第2类。1.2第二类。2类。2.1第2类。2.2

    • 第2类。3现在,在单个帖子页面中,我想显示帖子的直接类别祖先的名称(本例中为Cat2.1.2)。默认情况下,我只使用get_the_category(), 但它显示的是顶级类别(本例中为Cat2)。我现在不考虑取消选中顶层,因为这会在模板中引起另一个问题。

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

我来这篇文章是因为我在寻找代码。但这个明显的答案对我不再适用了。我写了一个函数来获取分配给帖子的最深层分类。

function post_deepest_level_cat($post_categories) {
    foreach ($post_categories as $category) {
        $cat_ids[] = $category->term_id;
    }   
    $tree_args = array(
        \'current_category\' => $cat_ids,
        \'depth\'             => 50,
        \'hierarchical\'     => true,
        \'echo\' => 0,
        );                  
                
    $category_list = wp_list_categories($tree_args);                
    $dom = new DOMDocument;
    @$dom->loadHTML($category_list);
    $links = $dom->getElementsByTagName(\'a\');
    $new_cat_array = array();
    foreach ($links as $link) { 
        $menu = get_term_by(\'name\', $link->nodeValue, \'category\');
        if (in_array($menu->term_id, $cat_ids)) {
            $deepest_cat_id = $menu->term_id;
        }                   
    }           
    return $deepest_cat_id;
}
这里使用上述函数就是一个例子。

$post_categories = wp_get_post_terms(10, \'category\'); //All categories assigned to this post id "10"
$deeper_cat_id = post_deepest_level_cat($post_categories );
echo $deeper_cat_id; // will echo the id of deepest and last category of the current post.
这将在2020年有所帮助。如果你有更好的代码,请告诉我。谢谢

SO网友:Jan Fabry

有可能get_the_category() 将始终按正确的顺序返回类别(最深的在末尾),但如果没有,您也可以循环所有类别,并删除其他类别指向它的类别作为其父类别的类别。

$post_categories = get_the_category();
$categories_by_id = array();
foreach ( $post_categories as $category ) {
    $categories_by_id[$category->cat_ID] = $category;
}
foreach ( $post_categories as $category ) {
    unset( $categories_by_id[$category->category_parent] );
}
// $categories_by_id will now only contain the deepest categories

SO网友:peroyomas

嗯,我想我找到了方法(没有完全测试):

<?php
$category = get_the_category($post->ID);
echo end($category)->cat_name;
?>
基本上,它从以下给定的类别数组中返回最后一个类别名称get_the_category.

结束

相关推荐

Custom Taxonomy Term Caching?

我有两种自定义帖子类型,“事件”和“机会”。它们共享一个自定义的层次分类法“位置”。我的客户添加了一些条款(美国(家长),然后是几个州(孩子))。我决定通过wp\\u insert\\u term添加其余的州来节省时间。这很有效!或者,看起来是这样。作为一名管理人员,这些条款对我来说很好。当我登录到一个“贡献者”帐户时,我可以去创建一个新的“机会”,所有的条件都如预期的那样显示出来。当要创建一个新的“事件”时,只会显示手工创建的术语。您可以通过“事件”在现场添加一个新术语,它在位置管理器中显示得很好。就好