WordPress Version: 6.1
/**
* Gets the number of posts written by a list of users.
*
* @since 3.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int[] $users Array of user IDs.
* @param string|string[] $post_type Optional. Single post type or array of post types to check. Defaults to 'post'.
* @param bool $public_only Optional. Only return counts for public posts. Defaults to false.
* @return string[] Amount of posts each user has written, as strings, keyed by user ID.
*/
function count_many_users_posts($users, $post_type = 'post', $public_only = false)
{
global $wpdb;
$count = array();
if (empty($users) || !is_array($users)) {
return $count;
}
$userlist = implode(',', array_map('absint', $users));
$where = get_posts_by_author_sql($post_type, true, null, $public_only);
$result = $wpdb->get_results("SELECT post_author, COUNT(*) FROM {$wpdb->posts} {$where} AND post_author IN ({$userlist}) GROUP BY post_author", ARRAY_N);
foreach ($result as $row) {
$count[$row[0]] = $row[1];
}
foreach ($users as $id) {
if (!isset($count[$id])) {
$count[$id] = 0;
}
}
return $count;
}