最好的方法是对数据库进行SQL查询,并获得如下结果wp_get_archives()
但现在您可以根据需要操纵结果。
在你的情况下,我会这样做,我添加了一些评论,以帮助你理解这个过程。
function get_archives_lists() {
global $wpdb, $wp_locale;
// get year month array
$monthly = $wpdb->get_results("
SELECT YEAR(post_date) AS year, MONTH(post_date) AS month
FROM $wpdb->posts
WHERE post_type=\'post\' AND post_status=\'publish\'
GROUP BY YEAR(post_date), MONTH(post_date)
ORDER BY post_date DESC
", ARRAY_A);
// Rearrange the results to be [year][] = month so it will be easy to render
$arr = [];
array_map(function($item) use (&$arr) {
$arr[$item[\'year\']][] = $item[\'month\'];
return;
}, $monthly);
// loop years
foreach($arr as $yearKey => $year) {
?>
<div class="col-sm-2">
<h2><a href="<?php echo get_year_link($yearKey); ?>"><?php echo $yearKey; ?></a></h2>
<ul>
<?php
// loop 12 for monthes
for($m = 1; $m <= 12; $m++) {
// get month name
$month = sprintf( __( \'%1$s\' ), $wp_locale->get_month( $m ) );
?>
<li>
<?php
// check if the month is in our results so we add a link to it.
if(in_array($m, $year)) {
?>
<a href="<?php echo get_month_link($yearKey, $m); ?>"><?php echo $month; ?></a>
<?php
} else {
echo $month;
}
?>
</li>
<?php
}
?>
</ul>
</div>
<?php
}
}
你可以看到我使用了bootstrap类
col-sm-2
例如,您可以使用自己的类和css。