If you have access to user IDs, you can use the count_user_posts() function.
You would get the number of posts by a user like this:
//Assume the variable $thisUser is equal to a valid user ID
$ThisUserCount = count_user_posts($thisUser, 'recipe');
EDIT:
Where you’re calling the count_user_posts() function, you’re passing it the array $args instead of the post type, ‘recipe’.
<?php
// 1. We define the arguments to define what we want to recover
$args = array (
'post_type' => 'recipe',
'posts_per_page' => '16',
);
// 2. We run the WP Query
// The Query
$the_query = new WP_Query ($args);
// 3. we display the number of messages and the authors!
// The Loop
if ($the_query-> have_posts()) {
//Set arguments to grab all authors with published recipes, and order them by user ID
$authorArgs = array(
'orderby' => 'ID',
'has_published_posts' => array('recipe'),
);
//Create an array of all authors with recipes published
$recipeAuthors = get_users($authorArgs);
//Loop through each recipe author
foreach($recipeAuthors as $user){
//Output user post count for recipes
echo count_user_posts($user->ID, 'recipe');
echo ' recipes for ';
//Output user's display name
echo $user->display_name;
echo '<br />';
}
// 3. We launch the loop to display the articles and the authors!
// The Loop
echo '<ul>';
while ($the_query-> have_posts()) {
$the_query-> the_post();
echo '<li>'. get_the_title(). '</li>';
echo '<li>'. get_the_author(). '</li>';
}
echo '</ul>';
} else {
// no posts found
}
wp_reset_postdata ();?>
Also, your get_the_author(2,$args) function calls are not correct. get_the_author() does not accept any parameters anymore, and it only returns the Display Name of the author of the current post in the Loop.