您可以检查类别\'parent\'
arribute,如果是0
该类别是父类别。
我还注意到了代码中的一些内容:
通过时get_the_category
未使用,但仍会调用它get_the_category
假设函数在循环中被调用,但如果在任何情况下,get_the_category
不返回类别,在html中插入检索到的值之前,函数抛出错误,应使用esc_*
函数考虑到所有这些因素,我重新编写了函数,并添加了检查父类别:
function thb_DisplaySingleCategory($boxed = true, $id = false) {
if ( (int) $id ) {
$cat = get_category($id);
if ( ! empty($cat) ) {
$backup = $cat->term_id;
if ( $cat->parent == 0 ) $id = $cat->term_id;
}
}
if ( empty($id) && in_the_loop() ) {
$id = \'\';
$categories = get_the_category();
if ( empty( $categories ) ) return;
while ( empty($id) && ! empty($categories) ) {
$cat = array_shift($categories);
if ( $cat->parent == 0 ) $id = $cat->term_id;
}
}
// if no parent cat found, but a not-parent cat id passed to function use that
if ( ! (int) $id && isset($backup) ) $id = $backup;
if ( ! (int) $id ) return;
$name = get_cat_name($id);
$url = esc_url( get_category_link($id) );
$wcolor = $boxed ? \'background\' : \'color\';
$class = $boxed ? \' class="boxed"\' : \'\';
$color = GetCategoryColor($id);
$frmt = \'<a href="%s"%s title="%s" style="%s:%s;">%s</a>\';
return sprintf( $frmt, $url, $class, esc_attr($name), $wcolor, $color, esc_html($name) );
}