Count posts within a custom post type and specific taxonomy and terms?

I'm looking to count how many post live within the custom post type called "videos", but only the ones from the category called "work".

?php $count_posts = wp_count_posts('videos'); echo $count_posts-publish; // ?

How can I adjust the above code to accomplish this?

Thanks!

Topic count posts Wordpress

Category Web


Found this while looking into a similar thing myself so here's my solution in case it's useful for anyone else... Note: Harmonic's answer works, depending on scenario though it may be easier to do this instead:

$count = get_category($category->term_id)->category_count;

Where $category is your taxonomy object.

Important note here being that this assumes no other post_type uses the same taxonomy. Details: get_category() is actually a wrapper function of get_term().

In this case, get_term() has a name__like parameter that get_category() doesn't. There are probably other little differences too.

See: get_term() get_category


I know that this is an old thread, but it shows up first in Google, so here is the REAL solution on how to do this.

$term = get_term( $termId, $taxonomy );
$total_in_term = $term->count;

So you need to pass the ID of the term and the taxonomy. This is the lightest weight solution as well as having the benefit of working with custom taxonomies.


This also should work:

$category = get_term('work', 'category');
$posts_in_category = $category->count;

For a specific custom taxonomy try:

$the_query = new WP_Query( array(
    'post_type' => 'CUSTOM_POST_TYPE',
    'tax_query' => array(
        array(
            'taxonomy' => 'CUSTOM_TAXONOMY',
            'field' => 'id',
            'terms' => TERM_ID
        )
    )
) );
$count = $the_query->found_posts;

Documentation at https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters


Basically if you do it with your found solution, you will waste quite much DB resources when you have lots of posts to fetch.

$query = new WP_Query();
echo $query->found_posts();

However WP_Query->found_posts just fetch 'posts_per_page' and do COUNT(*) mysql job for you. So I recommend you to use the latter one.


An alternative solution using WP_Query would be:

$args = array(
  'cat' => 4,
  'post_type' => 'videos'
);
$the_query = new WP_Query( $args );
echo $the_query->found_posts;

Found a solution.

<?php $posts = get_posts('post_type=videos&category=4'); 
$count = count($posts); 
echo $count; 
?>

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.