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