为 Typecho 博客添加文章字数统计和预计阅读时间
迁移主题后一边微调样式一边添加缺失功能,这篇记录一下给 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 · 转载请保留原文链接及作者
厉害了