为 Typecho 博客添加文章字数统计和预计阅读时间
⚠️ 本文发布于 266 日前,最后更新于 251 日前,其中信息可能已经过时,请自行斟酌。迁移主题后一边微调样式一边添加缺失功能,这篇记录一下给 Typecho 博客添加文章字数统计和预计阅读时间的功能。

把下文代码添加到 functions.php 中,文件一般在 /usr/themes/主题文件夹 目录。
文章字数统计
/**
* 文章字数统计
*/
function art_count($cid)
{
$db = Typecho_Db::get();
$rs = $db->fetchRow($db->select('table.contents.text')->from('table.contents')->where('table.contents.cid=?', $cid)->order('table.contents.cid', Typecho_Db::SORT_ASC)->limit(1));
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
echo mb_strlen($text, 'UTF-8');
}函数 art_count 用于统计文章中的仅中文字符,接收文章 ID 参数 $cid。
Typecho_Db::get()获取数据库连接实例$db$db->select()构建 SQL 查询,从table.contents表中选择text字段,并根据cid匹配特定文章的数据fetchRow()执行查询,并按cid升序排序,限制结果为一条记录preg_replace()将$rs['text']中非中文字符替换为空,仅保留中文字符。正则表达式"[^\x{4e00}-\x{9fa5}]"用于匹配非中文字符mb_strlen()计算过滤后的文本长度,指定编码为 'UTF-8'echo输出中文字符的数量
预计阅读时间
/**
* 文章阅读时间统计
*/
function art_time($cid)
{
$db = Typecho_Db::get();
$rs = $db->fetchRow($db->select('table.contents.text')->from('table.contents')->where('table.contents.cid=?', $cid)->order('table.contents.cid', Typecho_Db::SORT_ASC)->limit(1));
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
$text_word = mb_strlen($text, 'utf-8');
return ceil($text_word / 300);
}函数 art_time 计算文章阅读时间,接收文章 ID 参数 $cid。
- 将中文字符数除以 300 (假设每分钟阅读 300 个汉字),并用
ceil函数向上取整,计算出阅读时间 (分钟) - 根据网络信息一般人的中文字符阅读速度在 200-400 字符,这里取中间 300,也可自行调整
- 最终返回估计的阅读时间,以分钟为单位
添加到页面
添加后找到要展示的位置,如文章页面标题底下的 Metadata 栏,位置在主题中文件夹中的 post.php 文件:
<ul class="post-meta">
<li><?php _e('时间: '); ?>
<time datetime="<?php $this->date('c'); ?>" itemprop="datePublished"><?php $this->date(); ?></time>
</li>
<!-- 全文字数 -->
<li>
<span>约 <?php art_count($this->cid); ?> 字</span>
</li>
<!-- 阅读时间 -->
<li>
<span>
<?php
$minutes = art_time($this->cid);
echo $minutes . ' ' . ($minutes == 1 ? 'min' : 'mins') . ' read';
?>
</span>
</li>
<li><?php _e('分类: '); ?><?php $this->category(','); ?></li>
</ul>阅读时间统计根据英语单复数语法有调整,当 $minutes 等于 1 时使用 min,大于 1 时使用 mins。
其他文案和样式就自行修改,保存刷新后就能显示了。
参考链接:
标题:为 Typecho 博客添加文章字数统计和预计阅读时间
日期:2025-02-10
链接:https://logs.do/logs/add-word-count-and-reading-time-to-a-typecho-blog.html
许可:© CC BY 4.0 · 转载请保留原文链接及作者
厉害了