2

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.

2
  • how are you defining $cat-id ? Commented Sep 13, 2012 at 20:41
  • i'm not, i dont know how to make it refer to the top level category, so it's just pulling the current category.
    – CoreyRS
    Commented Sep 13, 2012 at 20:52

1 Answer 1

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>';  } 
?>
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.