6

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!

5

Found a solution.

<?php $posts = get_posts('post_type=videos&category=4'); 
$count = count($posts); 
echo $count; 
?>
  • 9
    Really bad idea. What if you have 15000 posts? You put them ALL in memory? These are the kind of misconceptions that could wreck a production site. – Cranio Mar 4 '16 at 15:12
  • As @Cranio mentions above: terrible idea to get all the posts just to count them. – dhuyvetter Jul 28 '17 at 12:08
6

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;
0

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.

2

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

3

This also should work:

$category = get_term('work', 'category');
$posts_in_category = $category->count;
  • 4
    This will fail if the a taxonomy is assined to more than one post type and you just need the post count of one post type – Pieter Goosen Nov 10 '15 at 9:15
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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