如何在WordPress中按年、月层级显示侧边栏Archives小部件?
实现按年分组的归档显示(带可点击月份链接)
没问题,我来帮你搞定这个归档显示的需求!要把默认的线性归档改成按年分组、月份可点击的格式,你需要对主题的sidebar.php文件做以下操作:
第一步:备份文件
先找到你当前使用主题的sidebar.php文件(一般在wp-content/themes/你的主题名/目录下),复制一份备份,防止修改出错后可以快速恢复。
第二步:替换默认归档代码
如果你的侧边栏是通过后台小部件添加的默认Archives组件,先登录WordPress后台,进入「外观」→「小部件」,把侧边栏里的默认Archives小部件移除。
然后打开sidebar.php,找到你希望显示归档的位置(比如原来小部件所在的区域),添加以下自定义代码:
<!-- 自定义按年分组归档 --> <div class="widget widget_archive"> <h3 class="widget-title">Archives</h3> <ul> <?php // 获取所有包含已发布文章的年份,按时间倒序排列 $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC"); // 循环遍历每个年份 foreach ($years as $year) : ?> <li> <strong><?php echo esc_html($year); ?></strong> <ul> <?php // 获取当前年份下有已发布文章的月份,按时间倒序排列 $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND YEAR(post_date) = $year ORDER BY post_date DESC"); // 循环遍历每个月份 foreach ($months as $month) : // 转换为月份英文全称(比如March) $month_name = date('F', mktime(0, 0, 0, $month, 1, $year)); // 获取该月份的归档链接 $archive_url = get_month_link($year, $month); ?> <li><a href="<?php echo esc_url($archive_url); ?>"><?php echo esc_html($month_name); ?></a></li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div>
代码说明
- 这段代码会先查询所有有已发布文章的年份,按从新到旧排序;
- 每个年份下会列出对应有文章的月份,同样按从新到旧排列;
- 月份会显示为英文全称(符合你要的March/February格式),并且是可点击的归档链接;
esc_html()和esc_url()是WordPress的安全函数,用来防止XSS攻击,确保输出内容安全。
第三步:测试效果
保存sidebar.php文件后,刷新你的网站前端,就能看到按年分组、月份可点击的归档效果了。如果样式和你的主题不匹配,你可以调整代码里的class属性(比如widget、widget-title),和主题现有小部件的class保持一致,就能继承主题的样式了。
内容的提问来源于stack exchange,提问作者catandmouse
相关产品推荐
相关产品推荐

