Taxonomy Drill-Down / Plugin Help – hierarchical queries within plugin?

I had done some work for my upcoming theme which shows category tree (Taxonomy drill down) from custom taxonomy. You can show it on taxonomy page or on category page.

if(! defined('TH_TAX_TYPE')) define('TH_TAX_TYPE','your-tax-type');

function is_decendent($term_id,$main_parent) {
   $terms= get_term_by('id', $term_id,TH_TAX_TYPE);
   $parent_term=  get_term_by('id', $terms->parent,TH_TAX_TYPE);
  $grand_parent_term=  get_term_by('id',$parent_term->parent,TH_TAX_TYPE);

if($terms || $grand_parent_term){
    if($grand_parent_term->term_id==$main_parent){
        return TRUE;
    }
  }
return FALSE;
}



 function category_tree() {
    global $term;
    $get_current_term_info= get_term_by('slug', $term,TH_TAX_TYPE);

$all_category=  get_terms(TH_TAX_TYPE);
$out_put="<ul class="category-tree">
  <li><a href="".get_option('all_cat_link').'">'.__('All Files','themeshive').'</a></li>';
foreach ($all_category as $main_cat) {
    if($main_cat->parent=='0'){
        $out_put.='<li><a href="'.get_term_link($main_cat).'">'.$main_cat->name.'</a>';
        $sub_cats=get_terms(TH_TAX_TYPE, array('parent'=>$main_cat->term_id ));
        if($sub_cats ){
            if($main_cat->slug==$term || $main_cat->term_id ==$get_current_term_info->parent || is_decendent($get_current_term_info->term_id,$main_cat->term_id)){
            $out_put.='<ul>';
            foreach ($sub_cats as $sub_cat) {
                $out_put.='<li><a href="'.get_term_link($sub_cat).'">'.$sub_cat->name.'</a> 
                    <small>('.$sub_cat->count.')</small>';
                    $sub_sub_cats=  get_terms(TH_TAX_TYPE, array('parent'=>$sub_cat->term_id));
                     if($sub_cat->slug==$term || $sub_cat->term_id ==$get_current_term_info->parent){
                    if($sub_sub_cats){
                        $out_put.='<ul>';
                        foreach ($sub_sub_cats as $sub_sub_cat) {
                          $out_put.='<li>
                              <a href="'.get_term_link($sub_sub_cat).'">'.$sub_sub_cat->name.'</a>
                                  <small>('.$sub_sub_cat->count.')</small></li>';
                        }
                        $out_put.='</ul>';
                    }}
                $out_put.='</li>';
            }
            $out_put.='</ul>';
            }
        }
         $out_put.='</li>';
    }
}
$out_put.='</ul>';
return $out_put;
}

CSS for Category Tree

ul.category-tree {
margin: 0 10px;
}
 ul.category-tree li {
margin-bottom: 0px;
padding-left: 0px;
padding: 5px 0px;
}
ul.category-tree li a {
font-size: 13px;
color: #8a6741;
}
ul.category-tree li ul {
border-left: 1px solid #999;
list-style: none;
margin-bottom: 0px;
margin-left: 0px;
margin-top: 7px;
}
ul.category-tree li ul li {
line-height: 15px;
padding-left: 17px;
position: relative;
}

ul.category-tree li ul li:before {
  background-color: #999;
  content: "";
  height: 1px;
  left: 0;
  position: absolute;
  top: 12px;
  width: 11px;
}

ul.category-tree li ul li a {
color: #555;
font-size: 13px;
}
ul.category-tree li ul li ul li a {
color: #555;
}
.category-tree.list {
overflow: hidden;
 }
.category-tree.list li {
float: left;
width: 100%;
margin: 0px 15px;
}
.category-tree.list li li {
float: none;
width: auto;
margin: inherit;
 }
.category-tree small {
font-size: 11px;
float: right;
}

Now you can echo category_tree() where you like or modify if you like.

I have done this way.