Reputation: 14738
While listing category, I want to show how many posts are there including subcategories. I tried this:
$cat_parent_ID = isset( $cat_id->category_parent ) ? $cat_id->category_parent : '';
if ($cat_parent_ID == 0) {
$tag = $cat_id;
} else {
$tag = $cat_parent_ID;
}
$q = new WP_Query( array(
'nopaging' => true,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $tag,
'include_children' => true,
),
),
'fields' => 'ids',
) );
$allPosts = $q->post_count;
echo $allPosts;
?>
<?php _e( 'posts found', 'agrg' ); ?>
The above works fine if category has no childs. But if I click on category which has subcategories, I see 0 posts found
even if there are posts, but all of them are in subcategory (so 0 posts in parent category but some posts in subcategory)
Where did I go wrong and what should I change?
Upvotes: 1
Views: 3296
Reputation: 11
function wt_get_category_count($input = '') {
global $wpdb;
if($input == '')
{
$category = get_the_category();
return $category[0]->category_count;
}
elseif(is_numeric($input))
{
$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->term_taxonomy.term_id=$input";
return $wpdb->get_var($SQL);
}
else
{
$SQL = "SELECT $wpdb->term_taxonomy.count FROM $wpdb->terms, $wpdb->term_taxonomy WHERE $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id AND $wpdb->terms.slug='$input'";
return $wpdb->get_var($SQL);
}
}
You can echo this in your HTML file by
<p><?php echo wt_get_category_count();?></p>
Upvotes: 1
Reputation: 5714
Try using this function:
function wp_get_cat_postcount($id) {
$cat = get_category($id);
$count = (int) $cat->count;
$taxonomy = 'category';
$args = array(
'child_of' => $id,
);
$tax_terms = get_terms($taxonomy,$args);
foreach ($tax_terms as $tax_term) {
$count +=$tax_term->count;
}
return $count;
}
this function will return total post counts from the specified category and its child categories (if any), just by passing the category id. i hope it works for you, thanks..
Upvotes: 1