Only show sub-category

时间:2015-07-11 作者:dbsso

我有一个新闻系统,上面有一个缩略图和一个框,显示与新闻相关的类别,使用<?php the_category(\', \'); ?>每个新闻只使用一个类别,效果很好,但自从我下载了Yoast的SEO后,我在页面顶部添加了一个面包屑。php和single。php并为我的新闻建立了层次结构。

现在,因为我有一个类似“主页>新闻>子类别>子类别”的层次结构类型。

我应该添加什么来代替\\u类别,以便在新闻框中仅显示“sub-sub-category”?这可能吗?

EDIT :

Example 1 (之前)调用仅在1个类别下设置了职位的类别:

html

<div class="news-box">
<div class="category-box">
   <h2><ul class="post-categories">
<li><a href="http://#.fr/category/News/" rel="tag">News</a></li></ul></h2>

    <!--Called using <?php the_category(\', \'); ?> when only one category is set-->

</div>
</div>
css

.news-box {
background-color:#777;
height:200px;
position:relative;
}
.category-box {
background-color:#FFFFFF;
position:absolute;
bottom:10px;
left:10px;
text-transform:uppercase;
}

https://jsfiddle.net/rpoyxvp9/

到目前为止效果很好

Example 2 (现在)调用多个子类别下设置了职位的类别:

html

<div class="news-box">
<div class="category-box">
    <h2><ul class="post-categories">
<li><a href="http://#.fr/category/news/anime/" rel="tag">Anime</a></li>
<li><a href="http://#.fr/category/news/" rel="tag">News</a></li></ul></h2>

    <!--Called using <?php the_category(\', \'); ?> when multiple categories are set-->

</div>
</div>
css

.news-box {
background-color:#777;
height:200px;
position:relative;
}
.category-box {
background-color:#FFFFFF;
position:absolute;
bottom:10px;
left:10px;
text-transform:uppercase;
}

https://jsfiddle.net/gthsa5mx/

这不是我想要的方式,正如您可以看到的,当在子类别下设置多个类别时,它会显示所有路径。但在我的示例2中,我只希望子类别“Anime”出现在类别框中。

另外,我希望它在没有<li>, 所以你要告诉我移除<ul> and <li> 但我不能,因为使用时会自动调用它the_category(\', \');.

2 个回复
SO网友:Pieter Goosen

您可以使用get_the_categories 筛选以从列表中删除父类别。the_category() 使用get_the_category_list() 反过来使用get_the_category()

其思想是根据父ID数组检查返回的类别,然后从列表中删除这些类别。

您可以尝试以下操作(需要PHP 5.3+

add_filter( \'get_the_categories\', function ( $categories )
{
    /**
     * Count the amount of categories attached to the post
     * If there is only one category, return that category
     */
    if ( count( $categories ) == 1 )
        return $categories;

    /**
     * Get an array of parent terms to test against the terms
     *
     * @see wp_list_pluck()
     * @link https://codex.wordpress.org/Function_Reference/wp_list_pluck
     */
    $parents = wp_list_pluck( $categories, \'parent\' );
    foreach ( $categories as $key => $category ) {
        /**
         * Test the category ID against $parents array
         * If the category ID is the $parents array, unset it from the
         * $category array
         */
        if ( in_array( $category->term_id, $parents ) )
            unset( $categories[$key] );
    }

    // Return new $categories array
    return $categories;
});
编辑the_category( \', \' ); 应返回由逗号分隔的类别列表。如果只存在一个类别,则应显示该类别而不显示任何项目符号

SO网友:Tom J Nowell

您的问题是您误解了类别的工作方式。

为了证明这一点,我将使用一种称为“颜色”的假设分类法:

Alice创建了一个名为“box”的帖子,并将其归类为“淡红色”。浅红色类别是名为“红色”的顶级类别的子类别,因此浅红色是红色的子类别。

Alice向Bob展示了名为“box”的帖子,Bob看到它的类别是“淡红色”。

Alice问Bob:

“方框是否属于“红色”类别?”

正确答案是肯定的。但你使用WordPress的方式表明,你认为答案是否定的。类别是包容的、层次分明的。父类别包含其子类别,并且包含这些子类别中的所有帖子。

根据您的问题,您似乎已将该帖子置于“动画”类别,但您也通过选中这两个框明确将其置于“新闻”类别。这是不必要的,您只需要选中动画框。

把它放在新闻类别是多余的,并且会导致你的问题,就像Alice告诉Bob淡红色的帖子也是红色的帖子一样,这是一种傲慢。

因此,只勾选动画类别。WordPress知道子类别中的帖子也属于其父类别。

结束

相关推荐

向GET_CATEGORIES下拉列表添加自定义选项

我有一个下拉菜单,用于在我正在处理的小部件中选择类别。一切正常,选项保存在数据库中。我现在要做的是添加一个空白选项,而不是在单击“保存”时自动设置。在这种情况下,用户可能不想设置类别。 $this->categories = get_categories(); foreach ( $this->categories as $cat ) { $selected = ( $cat->term_id == esc_att