Typecho博客新文章自动添加“New“标签的实现方案

Typecho新文章标题添加"New"标签的实现与优化

在这里插入图片描述

🌐 我的个人网站:乐乐主题创作室

1. 背景与需求分析

在博客系统中,标识新发布的文章是一个常见的需求。Typecho作为一款轻量级的PHP博客系统,默认并未提供直接的新文章标记功能。本文将详细介绍如何在Typecho中实现文章标题后自动添加"New"标签的功能,并考虑多种优化方案。

1.1 需求细化

我们需要实现的功能包括:

  • 自动判断文章是否为近期发布(如7天内)
  • 在文章标题后添加视觉明显的"New"标签
  • 支持自定义显示时间范围
  • 不影响原有SEO和页面结构
  • 提供多种样式选择

2. 技术方案设计

2.1 实现方式对比

在Typecho中实现这个功能主要有三种方式:

  1. 模板直接修改:简单但缺乏灵活性
  2. 插件开发:功能强大但需要额外安装
  3. 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 * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独立开发者阿乐

你的认可,价值千金。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值