How do I show child categories if in a parent category, and posts if in a child?

Solved, thanks to nofearinc on the wp.org irc chat! 🙂

https://gist.github.com/mpeshev/cb1cd3c56d06017b3d87

<?php 

$cat_id = get_query_var('cat');

if( ! empty( $cat_id ) ) {
    $category = get_category( $cat_id, ARRAY_A );

    if( ! empty( $category ) ) {
        // parent category
        if( $category['parent'] === '0' ) {

            // get child IDs
            $terms = get_term_children( $cat_id, 'category' );

            foreach( $terms as $term_id ) {
                $child_category = get_term( $term_id, 'category' );

                // if you need the category
                $category_name = $child_category->name;


                /**
                 * Sample data in your child category object: 
                 * 
                 * object(stdClass)[365]
                          public 'term_id' => string '14' (length=2)
                          public 'name' => string 'Child 1' (length=7)
                          public 'slug' => string 'child-1' (length=7)
                          public 'term_group' => string '0' (length=1)
                          public 'term_taxonomy_id' => string '14' (length=2)
                          public 'taxonomy' => string 'category' (length=8)
                          public 'description' => string '' (length=0)
                          public 'parent' => string '12' (length=2)
                          public 'count' => string '5' (length=1)
                          public 'object_id' => string '33' (length=2)
                 * 
                 * 
                 */

                // do whatever you like with the categories now...
            }

        } else { // in child category
            // do the regular loop here, if ( have_posts() ) ...
        }
    }
}

Leave a Comment