我已经创建了一个基本示例,说明如何实现此结果。
// 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>\';
在我运行此代码的站点中,这是我的结果,使用
print_r
Array
(
[2021] => Array
(
[publish] => 28
[pending] => 1
[draft] => 1
[private] => 1
)
[2020] => Array
(
[trash] => 2
)
)
我不知道你想如何输出这个,但现在你有了一个起点,最终数组的视觉表示,
$posts_per_year
, 所以你可以随心所欲。