首页 > 解决方案 > Wordpress 将父类别显示为标题,下方有子项

问题描述

我有一个祖父母类别,其中包括这样的孩子和孙子:

  1. 祖父母猫
    • 儿童猫 01
      • 孙子猫 01
      • 孙子猫 02
      • 孙子猫 03
    • 儿童猫 02
      • 孙子猫 01
      • 孙子猫 02
      • 孙子猫 03

我想在主要的祖父母类别页面上循环浏览这些内容,并显示每个子标题,下面有孙子链接。

到目前为止,我有这个显示所有子孙,但没有区分两者......

        <?php

        $this_category = get_category($cat);

        $args = (array (
            'orderby'=> 'id',
            'depth' => '1',
            'show_count' => '0',   
            'child_of' => $this_category->cat_ID,
            'echo' => '0'
        )); 

        $categories = get_categories( $args );
        
        foreach ( $categories as $category ) { 

            echo $category->name
        
        } ?>

如果有孩子,我需要一个规则...

标签: wordpressloopsforeachcategories

解决方案


通过检查类别是否有父类别来识别这相对简单

<?php

    $this_category = get_category($cat);

    $args = (array (
        'orderby'=> 'id',
        'depth' => '1',
        'show_count' => '0',   
        'child_of' => $this_category->cat_ID,
        'echo' => '0'
    )); 

    $categories = get_categories( $args );
    
    foreach ( $categories as $category ) { 
       if (!$category->parent) {
           echo 'Has no parent';
       }

       echo $category->name;
    
    } ?>

或者递归方法,具体取决于您的需要

<?php
$this_category = get_category($cat);

function category_tree(int $categoryId = 0) {
  $categories = get_categories([
    'parent' => $categoryId,
    'echo' => 0,
    'orderby' => 'id',
    'show_count' => 0
  ]);

  if ($categories) {
    foreach ($categories as $category) { 
      echo '<ul>';
        echo '<li>';
          echo $category->name;
          
          category_tree($category->term_id);
    }
  }

  echo '</li></ul>';
}

category_tree($this_category->cat_ID);

推荐阅读