Support » Plugins » Hacks » Multiple post_types with the function count_user_posts

  • Hi,

    I see since 4.1 that this function allows you to see how many posts a user has published within custom post types.

    For example, I can find out how many posts user 9 has published under the post type ‘film’ by using count_user_posts( 9 , "film" )

    However, is there a way that I can get the count for all of his posts from all our post types combined rather than just the one?

    Up until yesterday I had been using this…

    $curauth = (get_query_var('author_name')) ? get_user_by('slug', get_query_var('author_name')) : get_userdata(get_query_var('author'));
    $args = array(
    	'author' => $curauth->ID,
    	'post_type' => 'any'
    );
    $posts = new WP_Query($args);
    $post_count = $posts->found_posts;

    That was until it stoped working for me in the application I need it to (page of authors).

    Any help would be much appreciated,
    Sam

Viewing 3 replies - 1 through 3 (of 3 total)
  • You have two options depending on what you want to do. If you want to get all the posts of the author of every type, you can simply remove the post_type paramater from the $args array like so:

    $args = array(
    	'author' => $curauth->ID
    );

    and it will return all the posts of the author. However, it sounds like you want to find all the user’s posts of your custom post types (“get the count for all of his posts from all our post types “). You can do this by listing all of your custom post types in an array, and it will return all the posts of all of those specific types:

    $args = array(
    	'author' => $curauth->ID,
    	'post_type' => array(
    		'custom1',
    		'custom2',
    		'custom3'
    	)
    );

    Hi Cornelisonc,

    Thank you for your reply. It was something silly I was doing that was causing the issue. Fixed it last night!

    I am still intrigued to know if count_user_posts (http://codex.wordpress.org/Function_Reference/count_user_posts) will be expanded upon and used to count posts instead of the method I highlighted above.

    As far as I can tell, count_user_posts only works for one post_type (including custom since 4.1.0) only. Can anyone enlighten me otherwise on this?

    Moderator bcworkz

    (@bcworkz)

    You’re right, you cannot supply multiple post types to the function, either as array or comma delimited string, neither will work because of the way the function constructs the count query. It uses WP_Post object methods which can only apply to that one post type.

    You can put your post types in an array, then run a foreach loop to call the function for each post type in turn, keeping a running total of the counts returned.

    Or you can construct your own count query and use $wpdb->query($wpdb->prepare($sql)) to execute it. The result will be in $wpdb->last_result

Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘Multiple post_types with the function count_user_posts’ is closed to new replies.