如何获取当前帖子的上级类别插件

时间:2014-01-25 作者:DLR

我的主题使用下面的代码按类别进行样式设置,该代码将当前类别的slug作为CSS类插入。

<div class="CategorySpecificStyle 
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div> 
现在我要添加大量新的子类别,在CSS中添加它们似乎很愚蠢,因为我应该能够选择当前帖子的父类别并将样式应用到该类别。

我已经能够获取父类别的名称:

$parentcat = get_cat_name($category[0]->category_parent);
但空格(和大写)是一个问题。。。而且我似乎无法获得父类别的slug。

我知道我可能错过了一个简单的步骤,但任何见解都将不胜感激。

8 个回复
最合适的回答,由SO网友:Rachel Baker 整理而成

您需要使用返回的ID值$category[0]->category_parent 然后把它传过去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;
}

SO网友:s_ha_dum

您需要查询父类别数据。get_category 基本上就是为了做到这一点。

$category = get_the_category(); 
$parent = get_category($category[0]->category_parent);
echo $parent->slug;
这将返回类别的直接父级。这是给定的一组类别:

卡通狗Scooby如果你给它“Scooby”的ID,上面的代码将返回“Dog”。如果您想要最顶层的父类别——“卡通”,无论嵌套有多深,都可以使用以下内容:

$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();
}
这还具有相对整洁的错误处理的优点。

SO网友:scott8035

我喜欢@s\\u ha\\u dum之前的回答,但为了获得顶级类别,无论深度如何,我使用了我认为更简单的解决方案:

$cats = get_the_category();
foreach ( $cats as $cat ) {
    if ( $cat->category_parent == 0 ) {
        return $cat->name; // ...or whatever other attribute/processing you want
    }
}
return \'\'; // This was from a shortcode; adjust the return value to taste

SO网友:TikTakTikTak

如果它能帮助某人。。。获取子猫或父猫,具体取决于01 你穿上$category

$category = get_the_category();
$parent = get_cat_name( $category[0]->category_parent );
if( ! function_exists(\'get_cat_slug\') )
{
    function get_cat_slug($cat_id) {
        $cat_id = (int) $cat_id;
        $category = &get_category($cat_id);
        return $category->slug;
    }
}
if ( !empty($parent) ) {
    $output .= \'<H2>\' . esc_html( $category[1]->name ) . \'</H2>\';                               
} else {
    $output .= \'<H2>\' . esc_html( $category[0]->name ) . \'</H2\';
}

SO网友:Jafar Abazeed

您可以将其简化如下:

  $category   = get_the_category();
  $cat_parent = $category[0]->category_parent;
  $category   = $cat_parent != 0 ? get_term($cat_parent, \'category\')->slug : $category[0]->slug;

SO网友:Zane Claes

以下函数适用于返回根目录:

function get_root_category($category = null) {
  if (!$category) $category = get_the_category()[0];
  $ancestors = get_ancestors($category->term_id, \'category\');
  if (empty($ancestors)) return $category;
  $root = get_category(array_pop($ancestors)); 
  return $root;
}
用法:get_root_category()->slug

SO网友:Tuhin A.

以上所有答案都是好的,除了;category\\u parent“类别”;现在替换为;“父级”;从2018年开始!

2021

$custom_tax = \'books_category\'; //Custom taxonomy

//Get the terms from post ID
$terms = get_the_terms( $post->ID, $custom_tax );
$parent_id = $terms[0]->parent;

if ($parent_id != 0){
    $parent = get_term( $parent_id, $custom_tax);
    echo $parent->slug;
}

SO网友:Andersen

2021分类学

$capitulos = get_the_terms( $post->ID, \'capitulos\' );
if ($capitulos) {
foreach($capitulos as $capitulo) { if ($capitulo->parent == 0) 
echo \'<a href="\' . get_term_link($capitulo->term_id) . \'">\' . $capitulo->name . \'</a> \';}
}

结束

相关推荐

具有自定义分类的自定义帖子类型中的WP_DROPDOWN_CATEGORIES

我有一个自定义的帖子类型,它有自己的分类法,基本上“show Vinces”是帖子类型,Vincement regions是分类法。看到一个场馆无法在多个地区存在,我删除了默认的metta框,并使用wp_dropdown_categories(). 分类法项目正在输出并按我所希望的方式显示,但它们不会被提交,并且下拉列表在提交后不会保留所选内容。我已经尽我所能地查看原始metabox的各种属性,并尝试将这些属性应用到下拉列表中,但到目前为止,我没有任何乐趣。我看过一些various WPSE上的帖子和ha