Foreach循环 - 检查类别是否属于类别的子类别

时间:2015-10-06 14:02:54

标签: php wordpress foreach

我有一个foreach循环(wordpress模板),列出了除“最新新闻”类别之外的所有帖子类别:

<?php
    $exclude = array("Top News");
    $catagorystring = '';
    foreach((get_the_category()) as $category) {
        if ( !in_array($category->cat_name, $exclude) ) {
            $catagorystring .= '<a href="'.get_category_link($category->term_id ).get_option('category_base').'" class="category-link-einrichtungen">' . $category->name . '</a>, ';
        }
    }
    echo substr($catagorystring, 0, strrpos($catagorystring, ','));
?>

这是有效的,但另外我也想隐藏“顶级新闻”的儿童类别。

有一个wordpress功能允许我做这样的事情:

<?php if(post_is_in_descendant_category('3') ) { 
    echo 'is in category 3';
} ?>

但我不知道如何将其纳入foreach循环。

1 个答案:

答案 0 :(得分:1)

您可以使用类别对象的parent属性,并根据exclude数组中任何类别的ID进行检查:

$excludedCategories = array();
foreach((get_the_category()) as $category) {
  $breakLoop = false;
  if (!in_array($category->cat_name, $exclude)) {
    foreach($exclude as $cat_name_to_exclude) {
      if($category->parent == get_cat_ID($cat_name_to_exclude)) {
        $breakLoop = true;
      }
    }
    if($breakLoop) {
      array_push($excludedCategories, $category);
      continue;
    }
    $categorystring .= '<a href="'.get_category_link($category->term_id ).get_option('category_base').'" class="category-link-einrichtungen">' . $category->name . '</a>, ';
  }
}