List Custom Taxonomy Based on Post Count & Category

i have a custom taxonomy called ‘bike-category’ and a custom term called ‘brand’ and a custom post type called ‘bikes’

I want to list each bike-category then underneath list all brands only which have bikes in them.

Read More

Ive half got there however it seems very resource heavy/long winded and im sure im going about this the wrong way. Could someone suggest a better approach?

<ul>
<?php
// set up taxonomies
$tax_one = 'bike-category';
$tax_two = 'brands';
$post_type = 'bikes';

$categories = get_categories( array(
    'type'                     => $post_type,
    'orderby'                  => 'name',
    'order'                    => 'ASC',
    'hide_empty'               => 0,
    'hierarchical'             => 1,
    'taxonomy'                 => $tax_one ));

    foreach ( $categories as $category ) : // list all categories

    if($category->slug == $wp_query->query_vars['bike-category']) { $selected = ' class="selected"'; } else { $selected = ''; }

        echo '<li'.$selected.'><a href="'.get_bloginfo('url').'/bikes/'.$category->slug.'">'.$category->name.'</a><ul>';

            $terms = get_terms( $tax_two, array( 'hide_empty' => 0 ) );

            foreach ( $terms as $term ) :  // list all brands in each category

                $myquery['tax_query'] = array(
                    array(
                        'taxonomy' => $tax_one,
                        'terms' => array($category->name),
                        'field' => 'slug'
                    ),
                    array(
                        'taxonomy' => $tax_two,
                        'terms' => array($term->name),
                        'field' => 'slug'
                    )
                );
                $the_posts = new WP_Query($myquery);
        print_r($myquery);
                if ( $the_posts->have_posts() ) : // if there are posts in the current brand and category then display it

                    echo '<li><a href="'.get_bloginfo('url').'/bikes/'.$category->slug.'/'.$term->slug.'">'.$term->name.'</a></li>';

                endif;

            endforeach;

        echo '</ul></li>';

    endforeach; ?></ul>

Related posts

Leave a Reply

1 comment