类别名称相互依赖?

时间:2016-07-06 作者:developer

有人能解释一下以下问题的原因吗?

假设您为您的帖子创建了一个类似“sample”的类别。在Wordpress中编辑类似“Hello World”的帖子时,您可以同时选择“未分类”和新创建的类别。然后,在像“二十一五”这样的主题中,你会在主页中提到的帖子下面看到两个类别名称。现在,如果您取消选中帖子中的“未分类”类别,“示例”类别的名称也不会出现在帖子下面。这就像他们彼此依赖,这是不合逻辑的。

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

如果您查看二零一五主题(和其他捆绑主题),您会发现类似于以下内容的代码:(这是从inc/template-tags.php

$categories_list = get_the_category_list( _x( \', \', \'Used between list items, there is a space after the comma.\', \'twentyfifteen\' ) );
if ( $categories_list && twentyfifteen_categorized_blog() ) {
    printf( \'<span class="cat-links"><span class="screen-reader-text">%1$s </span>%2$s</span>\',
        _x( \'Categories\', \'Used before category names.\', \'twentyfifteen\' ),
        $categories_list
    );
}
很明显,你对$category_list, 因此,正是基于此,无论为一篇文章分配了多少类别,都应该显示您的列表。

曲线球位于&& twentyfifteen_categorized_blog() 您的if 条件在这里,您可以看到您的条件语句失败了。但首先,让我们看看twentyfifteen_categorized_blog() 功能(正如我所说,其他捆绑主题也有类似的功能)

function twentyfifteen_categorized_blog() {
    if ( false === ( $all_the_cool_cats = get_transient( \'twentyfifteen_categories\' ) ) ) {
        // Create an array of all the categories that are attached to posts.
        $all_the_cool_cats = get_categories( array(
            \'fields\'     => \'ids\',
            \'hide_empty\' => 1,
            // We only need to know if there is more than one category.
            \'number\'     => 2,
        ) );
        // Count the number of categories that are attached to the posts.
        $all_the_cool_cats = count( $all_the_cool_cats );
        set_transient( \'twentyfifteen_categories\', $all_the_cool_cats );
    }
    if ( $all_the_cool_cats > 1 ) {
        // This blog has more than 1 category so twentyfifteen_categorized_blog should return true.
        return true;
    } else {
        // This blog has only 1 category so twentyfifteen_categorized_blog should return false.
        return false;
    }
}
此功能的作用是统计站点上有多少类别,但它只统计实际分配了帖子的类别数量。

在您的示例中,仅使用默认帖子Hello World根本没有其他帖子),如果您只分配uncategorized 类别或仅sample 类别,这意味着只有其中一个类别分配了一个帖子,另一个类别将为空。因为我们在中隐藏了空类别get_categories() 内部twentyfifteen_categorized_blog() 作用get_categories() 将只返回一个类别,即分配了职位的类别。

现在,如果你看看twentyfifteen_categorized_blog() 函数,如果返回的类别总数get_categories 为0或1时,函数将返回false, 这不符合您的条件,这就是为什么您看不到正在显示的分配给您的帖子的类别。

如果您将这两个类别都分配给该职位,get_categories 将返回2个类别(任何时候返回的最大数量),因为这两个类别都有一个分配给它的帖子,这将使函数返回true,并将激发和显示您的状态。

当您创建越来越多的类别并为其分配帖子时,get_categories() 内部twentyfifteen_categorized_blog() 将始终返回2个cateriories(,因为我们最多只查询2个),这将始终让twentyfifteen_categorized_blog() 回来true 只要一篇文章至少分配了一个类别,它就会一直激发你的代码