Edit: Just to credit the original, I’m fairly sure [this] is where I grabbed it from. Seems a quick search shows stackexchange is full of modifications of the same/ish code. But as the comments are spot on, I’d say all the credit goes to @W van Dam
I had a similar setup with multiple users who only saw their own posts but I have not worked with custom post statuses at all.
This is an old code snippet from an old project, but maybe it’s of some use
add_filter('wp_count_posts', function($counts, $type, $perm) {
global $wpdb;
// We only want to modify the counts shown in admin and depending on $perm being 'readable'
if (!is_admin() || 'readable' !== $perm) return $counts;
// Only modify the counts if the user is not allowed to edit the posts of others
$post_type_object = get_post_type_object($type);
if (current_user_can( $post_type_object->cap->edit_others_posts ) ) { return $counts; }
$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s AND (post_author = %d) GROUP BY post_status";
$results = (array) $wpdb->get_results($wpdb->prepare( $query, $type, get_current_user_id() ), ARRAY_A);
$counts = array_fill_keys(get_post_stati(), 0);
foreach ($results as $row) { $counts[ $row['post_status'] ] = $row['num_posts']; }
return (object) $counts;
}, 10, 3);
And the reason I asked about the posts they were seeing because I’m fairly sure this’ll edit the counts to show only their own posts.