Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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

1 Answer 1

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',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array( $term)
            ),
            array(
                '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

 
discard

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.