如何按父级显示选定的分类

时间:2019-02-11 作者:ugurcan

我有一个自定义分类法作为“服务”,自定义帖子类型作为“公文包”。我想做的是;我想在单个页面中列出父分类下的所有选定服务。

这就是我想要实现的目标:

设计(父-未选择):web、图形、打印(选定的子分类法)

  • 开发(父-未选择):应用程序、游戏、web(选定的子分类法)
    • ,下面是我的代码:

      $terms = get_the_terms( $post->ID, \'services\' );
      
      foreach ( $terms as $term ) {
        $parent = get_term_by(\'id\', $term->parent, \'services\');
        $parent_obj = get_term($parent->term_id, \'services\');
        $parent_name = $parent_obj->name;
      
        echo $parent_name . \': \' . $term->name . \'<br>\';
      }
      

      enter image description here

      这就是现在的样子。

      enter image description here

      这就是我想要的。

    1 个回复
    最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

    这并不难,但这次需要一些PHP编码。下面是实现该技巧的代码(假设该层次结构中只有2个级别):

    $post_terms = get_the_terms( $post->ID, \'services\' );
    $terms = array();
    
    foreach ( $post_terms as $term ) {
        if ( $term->parent ) {
            if ( ! array_key_exists( $term->parent, $terms ) ) {
                $terms[ $term->parent ] = array(
                    \'term\' => get_term( $term->parent, \'services\' ),
                    \'children\' => array()
                );
            }
            $terms[ $term->parent ][\'children\'][] = $term;
        } else {
            if ( ! array_key_exists( $term->term_id, $terms ) ) {
                $terms[ $term->term_id ] = array(
                    \'term\' => $term,
                    \'children\' => array()
                );
            }
        }
    }
    
    foreach ( $terms as $term_info ) {
        echo $term_info[\'term\']->name;
        if ( ! empty($term_info[\'children\']) ) {
            echo \': \';
            foreach ( $term_info[\'children\'] as $i => $child ) {
                if ( $i ) echo \', \';
                echo $child->name;
            }
        }
        echo "<br/>\\n";
    }