I have created a basic example on how you could achieve this result.
// get all posts from our CPT no matter the status
$posts = get_posts([
'post_type' => 'papers', // based on the post type from your qeustion
'post_status' => 'all',
'posts_per_page' => -1
]);
// will contain all posts count by year
// every year will contain posts count by status (added as extra =])
$posts_per_year = [];
// start looping all our posts
foreach ($posts as $post) {
// get the post created year
$post_created_year = get_the_date('Y', $post);
// check if year exists in our $posts_per_year
// if it doesn't, add it
if (!isset($posts_per_year[$post_created_year])) {
// add the year, add the posts stauts with the initial amount 1 (count)
$posts_per_year[$post_created_year] = [
$post->post_status => 1
];
// year already exists, "append" to that year the count
} else {
// check if stauts already exists in our year
// if it exist, add + 1 to the count
if (isset($posts_per_year[$post_created_year][$post->post_status])) {
$posts_per_year[$post_created_year][$post->post_status] += 1;
// it doesnt exist, add the post type to the year with the inital amount 1 (count)
} else {
$posts_per_year[$post_created_year][$post->post_status] = 1;
}
}
}
// this is for debugging, to see what our variable contains
// after the loop
echo '<pre>';
print_r($posts_per_year);
echo '</pre>';
In the site that I runed this code this was my result, using print_r
Array
(
[2021] => Array
(
[publish] => 28
[pending] => 1
[draft] => 1
[private] => 1
)
[2020] => Array
(
[trash] => 2
)
)
I have no idea how you want to output this but now you have a starting point with a visual representation of the final array, $posts_per_year
, so you can do with it what ever you want.