5

Is there a way to count all published posts from a custom taxonomy?

While looking around I found this snippet but I didn’t manage to get it to work …

global $wpdb;
$query = "
        SELECT COUNT( DISTINCT cat_posts.ID ) AS post_count
        FROM wp_term_taxonomy AS cat_term_taxonomy INNER JOIN wp_terms AS cat_terms ON
        cat_term_taxonomy.term_id = cat_terms.term_id
        INNER JOIN wp_term_relationships AS cat_term_relationships 
        ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id
        INNER JOIN wp_posts AS cat_posts 
        ON cat_term_relationships.object_id = cat_posts.ID
        WHERE cat_posts.post_status = 'publish' 
        AND cat_posts.post_type = 'post' 
        AND cat_term_taxonomy.taxonomy = 'YOUR-CUSTOM-TAXONOMY' 
        AND cat_terms.slug IN ('TERM-SLUG-1, TERM-SLUG-2')
    ";
return $wpdb->get_var($query);
5

Use an instance of WP_Query to query the database. http://codex.wordpress.org/Class_Reference/WP_Query

To query database for custom taxonomies use,

$query = new WP_Query( array( 'people' => 'bob' ) );

For more details on available options see: Taxonomy Parameters http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Retrieve published posts using

'post_status' => 'publish'

Use found_posts to retrive the number of posts

$count = $query->found_posts;
2
function wp_get_productcat_postcount($id) {

    //return $count;
    $args = array(
      'post_type'     => 'product', //post type, I used 'product'
      'post_status'   => 'publish', // just tried to find all published post
      'posts_per_page' => -1,  //show all
      'tax_query' => array(
        'relation' => 'AND',
        array(
          'taxonomy' => 'product_cat',  //taxonomy name  here, I used 'product_cat'
          'field' => 'id',
          'terms' => array( $id )
        )
      )
    );

    $query = new WP_Query( $args);

    /*
    echo '<pre>';

    print_r($query->post_count);
    echo '</pre>';
    */

    return (int)$query->post_count;

}
1

Wordpress adds attribute count to each taxonomy and updates it whenever a new post is inserted or updated. Because it does not want to go to database again and do calculations to get posts count in taxonomy.

echo $custom_tax_obj->count;
1

You can do this with the current object with get_queried_object()

$posts = get_queried_object();
echo $posts->count;

Otherwise you may unnecessarily run a second query, right?

  • Brilliant! :) Thanks a lot. This works for when I'm inside a category. :) – Woppi May 31 '17 at 9:50
1

Below code will get count of article from particular taxonomy

<?php 
  $terms = get_the_terms( $post->ID , 'your-taxonomy' );
  foreach ( $terms as $term ) {
    echo $term->count;
  } ?>
0
$args = array(
'post_type' => 'product',
'post_status' => 'published',
'product_cat' => $catpage, // $catpage == your category slug name
'numberposts' => -1
);
echo $num = count( get_posts( $args ) );
0

I face this situation in the taxonomy archive templates (e.g. taxonomy-taxname.php) for a site with a custom post type and associated category/tag taxonomies. I wanted in my header to display a count of how many items used the taxonomy.

In my taxonomy archive templates, I needed to find the term the taxonomy represented, then pass it off to a function to get the number of custom post type items using that term, this from the tag taxonomy

// the term we need for this taxonomy
$term_obj = get_queried_object(); 

// get the term object
$term = get_term( $term_obj->term_id, 'taxname' );

// get a count of content with this term
$tax_count = get_tax_count('taxname', $term->slug, 'custom-post-type-name');

// grammar counts
$plural = ( $tax_count == 1) ? '' : 's';

echo $tax_count . ' Item' . $plural . ' Tagged "' . $term->name . '"';

The function for doing the count uses WP_Query with a tax_query:

function tax_count ( $taxonomy, $term, $post_type ) {
    // find the number of items in custom post type that use the term in a taxonomy

    $args = array(
        'post_type' =>  $post_type,
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => $term,
            ),
        ),
    );

    $tax_query = new WP_Query( $args );

    return ($tax_query->found_posts);

}

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.