问题描述

我的主题根据类别使用以下代码,将当前类别的插件作为 CSS 类插入。

<div class="CategorySpecificStyle
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div>

现在我要添加大量新的 sub-categories,而且当我能够选择当前帖子的父类别并应用样式时,它们全部添加到 CSS 中似乎很愚蠢。

我已经能够得到父类别的名称:

$parentcat = get_cat_name($category[0]->category_parent);

但空格 (和大小写) 是一个问题… 我似乎无法得到父类别的 s 。。

我知道我可能在某处失去了一个简单的步骤,但任何见解都将不胜感激。

最佳解决方案

您将需要使用 $category[0]->category_parent 返回的 ID 值,并通过 get_term()。例:

$category = get_the_category();
$category_parent_id = $category[0]->category_parent;
if ( $category_parent_id != 0 ) {
    $category_parent = get_term( $category_parent_id, 'category' );
    $css_slug = $category_parent->slug;
} else {
    $css_slug = $category[0]->slug;
}

次佳解决方案

您将需要查询父类别数据。 get_category 几乎是为了做到这一点。

$category = get_the_category();
$parent = get_category($category[0]->category_parent);
echo $parent->slug;

这将返回类别的直系父母。这是一组类别:

  • 动画片

      • 史酷比

如果您给它”Scooby” 的 ID,上述代码将返回”Dog” 。如果你想要最顶层的父类 – “Cartoon”– 无论嵌套深度多大,使用这样的东西:

$category = get_the_category();
$parent = get_ancestors($category[0]->term_id,'category');
if (empty($parent)) {
  $parent[] = array($category[0]->term_id);
}
$parent = array_pop($parent);
$parent = get_category($parent);
if (!is_wp_error($parent)) {
  var_dump($parent);
} else {
  echo $parent->get_error_message();
}

这也具有相对整齐的错误处理的优点。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。