WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have custom post type 'Product', and 2 custom taxonomies 'category' and 'product status'.

What i am trying to do is list categories in page template and show how many total products in category and how many of them have status 'available'

Some thing like this

Category | No. of products | Products available

Can any one show how to get posts that are in particular category and have particular status value from other taxonomy...

share|improve this question
up vote 2 down vote accepted

I'm sure that a custom sql query would work much better but here is an option using the WordPress Tools available

//first get all categories
$categories = get_terms( 'category', array(
    'orderby'    => 'count',

//then create an array for easier processing
foreach ( $categories as $cat ) {
       $slugs[] = $cat->slug;
       $counts[$cat->slug]['count'] = $cat->count;

//then loop over the categories and for each one create a "query" to count the number of available products
foreach($slugs as $term){
    $products = get_posts(array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => array(
            'relation' => 'AND',
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array( $term)
                'taxonomy' => 'product_status',
                'field' => 'slug',
                'terms' => array( "available"),
                'operator' => 'NOT IN',
    $counts[$term]['available'] = count($products);

//then all the is left is to print everyting Out
if (count($counts) > 0){
    echo '<table><tr><td>Category</td><td>No. of products</td><td>Products available</td></tr>';
    foreach ($counts as $key => $val){
        echo '<tr><td>'.$key.'</td><td>'.$var['count'].'</td><td>'.$var['available'].'</td></tr>';
    echo '</table>';
share|improve this answer
Thanks... tax_query in wp 3.xx is awsome.. well as you said custom query would work better, i printed wp_query and used as query as select count(wp_posts.id).... – Rajeev Vyas Jul 25 '11 at 15:30

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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