Typecho新文章标题添加"New"标签的实现与优化
🌐 我的个人网站:乐乐主题创作室
1. 背景与需求分析
在博客系统中,标识新发布的文章是一个常见的需求。Typecho作为一款轻量级的PHP博客系统,默认并未提供直接的新文章标记功能。本文将详细介绍如何在Typecho中实现文章标题后自动添加"New"标签的功能,并考虑多种优化方案。
1.1 需求细化
我们需要实现的功能包括:
- 自动判断文章是否为近期发布(如7天内)
- 在文章标题后添加视觉明显的"New"标签
- 支持自定义显示时间范围
- 不影响原有SEO和页面结构
- 提供多种样式选择
2. 技术方案设计
2.1 实现方式对比
在Typecho中实现这个功能主要有三种方式:
- 模板直接修改:简单但缺乏灵活性
- 插件开发:功能强大但需要额外安装
- Widget扩展:平衡灵活性和易用性
经过评估,我们选择Widget扩展方式,因为它:
- 不需要安装额外插件
- 保持系统轻量
- 便于主题升级维护
- 有足够的灵活性
2.2 核心逻辑设计
实现逻辑流程图:
判断文章发布时间 → 计算与当前时间差 → 判断是否在设定时间内 → 添加New标签 → 输出结果
3. 核心代码实现
3.1 基础实现方案
在主题的functions.php
中添加以下代码:
/**
* 为7天内发布的文章标题添加New标签
* @param string $title 原始标题
* @param int $postId 文章ID
* @return string 处理后的标题
*/
function addNewLabel($title, $postId = 0) {
$post = Typecho_Widget::widget('Widget_Archive');
$created = $post->created;
// 判断是否为7天内发布的文章
if ($created + (7 * 24 * 60 * 60) > time()) {
$title .= ' <span class="new-label">New</span>';
}
return $title;
}
// 挂载到文章标题过滤器
Typecho_Plugin::factory('Widget_Archive')->title = array('addNewLabel');
3.2 增强版实现(支持自定义)
/**
* 增强版New标签功能
* @param string $title 原始标题
* @param int $postId 文章ID
* @param array $options 配置选项
* @return string 处理后的标题
*/
function addNewLabelEnhanced($title, $postId = 0, $options = array()) {
// 默认配置
$defaults = array(
'days' => 7, // 显示天数
'label' => 'New', // 标签文本
'class' => 'new-label', // CSS类名
'position' => 'after', // 位置: before|after
'exclude_categories' => array() // 排除的分类ID
);
$options = array_merge($defaults, $options);
$post = Typecho_Widget::widget('Widget_Archive');
// 排除指定分类
if (!empty($options['exclude_categories']) &&
in_array($post->category, $options['exclude_categories'])) {
return $title;
}
// 检查发布时间
if ($post->created + ($options['days'] * 24 * 60 *