Get second level terms of custom taxonomy

I want to get second level terms of a specific parent (first-level) term in a custom taxonomy. Sounds complicated but would be useful.

Term 1
   SubTerm-1.1
   SubTerm-1.2
       SubTerm-1.2.1
Term 2
   SubTerm-2.1

Say, if SubTerm->parent is Term 1’s id, then i want to output SubTerm 1.1 and 1.2 but not 1.2.1.

Read More

wp_list_categories(array('depth' => 2, 'taxonomy' => 'customtax')); is not i’m looking for as it lists terms with their links, which i dont want to, and there is no filtering option by SubTerm->parent id.

So any idea?

Related posts

Leave a Reply

2 comments

  1. You can use PHP’s array_filter to process the results of a taxonomy query function that returns its results, and then display them. Something like:

    # This returns the whole taxonomy...
    $whole_tax = get_terms('customtax', array('hide_empty' => 0));
    $second_level = array_filter($whole_tax, function ($t) {
      # This term has a parent, but its parent does not.
      return $t->parent != 0 && get_term($t->parent, 'customtax')->parent == 0;
    });
    

    At this point you can render $second_level to output in whatever format you want.

    NB. If this is often used on a busy side should avoid all those extra get_term calls by reading from the $whole_tax array assuming the documentation’s statement that get_term always hits the database when passed an id.

  2. $tax ='taxonomy';
            $args = array(
              'taxonomy' => $tax,
              'hide_empty' => false,
              'parent' => 0,
              );
        $toplv_term_query = new WP_Term_Query($args);
            foreach($toplv_term_query->get_terms() as $toplv_term){
                 $args = array(
                   'taxonomy' => $tax,
                   'hide_empty' => false,
                   'parent' => $toplv_term->term_id,
                  );
              $secondlv_term_query = new WP_Term_Query($args);
                  foreach($secondlv_term_query->get_terms() as $secondlv_term){
                       $secondlv_term->term_id;
    
                 }
            }