Show children of top level category only

Imagine i have a URL structure like this: www.domain.com/category/subcategory/

This is my code:

<?php
$args=array(
    'child_of' => $cat-id,
    'hide_empty' => 0,
    'orderby' => 'name',
    'order' => 'ASC'
);
$categories=get_categories($args);
foreach($categories as $category) { 
    echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>';  } 
?>

When I’m on “www.domain.com/category/” the code correctly displays all children of the category, but when on “www.domain.com/category/subcategory/” the code doesn’t display any results because the subcategory doesnt have any children. I need the code to only display the children of the top-level category even when on it’s child pages.

How do i accomplish this? TIA.

1 Answer
1

Ok, try this. It should capture the current category object and then go up the chain until it finds the current categories top-most ancestor.

    // get the category object for the current category
    $thisCat = get_category( get_query_var( 'cat' ) ); 

    // if not top-level, track it up the chain to find its ancestor
    while ( intval($thisCat->parent) > 0 ) {
        $thisCat = get_category ( $thisCat->parent );
    }

    //by now $thisCat will be the top-level category, proceed as before
    $args=array(
        'child_of' => $thisCat->term_id,
        'hide_empty' => 0,
        'orderby' => 'name',
        'order' => 'ASC'
    );
    $categories=get_categories( $args );
    foreach( $categories as $category ) { 
        echo '<a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a>';  } 
?>

Leave a Comment