获取当前帖子的上级和子类别

时间:2016-11-22 作者:Hyperion

我需要在每个帖子中显示其父类别和子类别,此时我使用此代码:

<?php
$categories = get_the_category();

echo \'Parent Category: <a href="\' . esc_url( get_category_link( $categories[0]->term_id ) ) . \'">\' . esc_html( $categories[0]->name ) . \'</a> \\n\';

echo \'Sub Category: <a href="\' . esc_url( get_category_link( $categories[1]->term_id ) ) . \'">\' . esc_html( $categories[1]->name ) . \'</a>\';
?>
问题是,此代码根据类别的顺序给出类别[0]和类别[1]的值。在一些帖子中,顺序是父->子,在其他帖子中是子->父(不知道为什么)。因此,当我在一些帖子中访问$类别时,我得到的是父类而不是子类。

2 个回复
最合适的回答,由SO网友:newjonnydepony 整理而成

可以这样尝试:

$categories = get_the_category();

echo \'<ul>\';
echo \'<li> Parent Category: \';
foreach( $categories as $category ){
     if($category->parent != 0){
          $parent_category = get_term( $category->parent );
          echo \'<a href="\' . esc_url( get_category_link($parent_category->term_id)) . \'">\' . esc_html($parent_category->name) . \' </a>\';
          break; 
     }
}
echo \'</li>\';
echo \'<li>Subcategory: \';
foreach( $categories as $category ){
     if($category->parent != 0){
          echo \'<a href="\' . esc_url( get_category_link($category->term_id)) . \'">\' . esc_html($category->name) . \' </a>\';
     }
}
echo \'</li></ul>\';
如果您的帖子的类别具有相同的父类别(例如,您的帖子具有类别“child\\u 1”和“child\\u 2”,这两个类别都是“parent\\u 1”的子类别),则这种方法非常有效。它会检查每个帖子的类别。在第一个foreach-循环,只要一个类别有一个父类别,它就会被回显,并且由于break.但是,如果您的帖子有多个具有不同父类别的类别(例如,您的帖子有“child\\u A\\u 1”类别,它是“parent\\u A”的子类别,而“child\\u B\\u 1”类别是“parent\\u B”的子类别),此代码将无法正常工作,因为它只会回显第一个子类别中出现的第一个子类别的父类别foreach-环

SO网友:socki03

您可以使用array_reverse 修复它,使其对您更有意义。

<?php $categories = get_the_category();

$rev_categories = array_reverse( $categories );

echo \'Parent Category: <a href="\' . esc_url( get_category_link( $categories[0]->term_id ) ) . \'">\' . esc_html( $categories[0]->name ) . \'</a> \\n\';

echo \'Sub Category: <a href="\' . esc_url( get_category_link( $categories[1]->term_id ) ) . \'">\' . esc_html( $categories[1]->name ) . \'</a>\';
?>
如果您绝对确定不会有一个$categories[1]不存在的实例,那么您的代码就可以了,但我想更改它,请运行foreach 循环所有类别,如果$key 为0。

foreach ( $rev_categories as $key => $category ) {
    echo ( $key == 0 ? \'Parent\' : \'Sub\' ) . \' Category: <a href="\' . esc_url( get_category_link( $category->term_id ) ) . \'">\' . esc_html( $category->name ) . \'</a>\';
}