/ 博客 / 2038阅

WordPress估算文章阅读时间(改良版)

大发有旧文《WordPress估算文章阅读时间》,实际应用了一下,觉得:1、用平均阅读时间不很准确;2、只能显示分钟,不科学。于是改良如下:

/* 估算文章阅读时间 */

//获取文章长度
function fa_get_postlength(){
global $post;
//注:如文中用了某些特殊插件导致出现大量特殊字符,建议用wp_strip_all_tags。
return strlen( strip_shortcodes(strip_tags(apply_filters('the_content', $post->post_content))) );
}

//获取图片张数
function fa_get_post_img_count(){
global $post;
preg_match_all('/<img.*?(?: |\\t|\\r|\\n)?src=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>/sim', $post->post_content, $strResult, PREG_PATTERN_ORDER);
return count($strResult[1]);
}

//增加判断并输出小时、分钟和秒数功能
function Sec2Time($time){
if(is_numeric($time)){
$value = array(
"years" => 0, "days" => 0, "hours" => 0,
"minutes" => 0, "seconds" => 0,
);
if($time >= 31556926){
$value["years"] = floor($time/31556926);
$time = ($time%31556926);
}
if($time >= 86400){
$value["days"] = floor($time/86400);
$time = ($time%86400);
}
if($time >= 3600){
$value["hours"] = floor($time/3600);
$time = ($time%3600);
}
if($time >= 60){
$value["minutes"] = floor($time/60);
$time = ($time%60);
}
$value["seconds"] = floor($time);
if($value["hours"] != 0) {
$t= $value["hours"] ."h". $value["minutes"] ."m".$value["seconds"]."s";
}
if($value["hours"] == 0 && $value["minutes"] != 0) {
$t= $value["minutes"] ."m".$value["seconds"]."s";
if($value["seconds"] == 0) {
$t= $value["minutes"] ."m";
}
}
if($value["hours"] == 0 && $value["minutes"] == 0 && $value["seconds"] !=0) {
$t= $value["seconds"]."s";
}
if($value["hours"] == 0 && $value["minutes"] == 0 && $value["seconds"] ==0) {
$t= "1s";
}
Return $t;
}else{
return (bool) FALSE;
}
}

//计算阅读时间,以秒为单位
function fa_get_post_readtime(){
global $post;
$all = fa_get_postlength() / 40 + fa_get_post_img_count();
return Sec2Time($all);
}

在循环内使用 <?php echo fa_get_post_readtime(); ?> 调用。

# 写于八年前,改于二年前
           

13

  1. 大致

    不就是字数统计嘛,这不科学啊。
    比如我写一堆“滹嬖綟巁”这样的字……

    Firefox 52 · Windows 7
    1. S̆̈

      @大致这四个字怎么读啊……

      Google Chrome 56 · Mac OS X 10.12
      1. 大致

        @S̆̈胡逼咧咧

        Firefox 52 · Windows 7
    2. S̆̈

      @大致挺科学的啊,根据字数+图片统计估算阅读时间。

      Safari 10 · iPhone iOS 10.3.1
      1. 大致

        @S̆̈同样的字数,流水帐跟古文的阅读时间不同。
        一张蓝天白云跟一张圣斗士全家福的读图时间也不同。

        Firefox 52 · Windows 7
        1. S̆̈

          @大致这个只能靠猜了。

          Google Chrome 56 · Mac OS X 10.12
        2. 木瓜园

          @大致意思是假如放一张甲骨文的象形文字图,指不定就无法破解,永远读不完了。

          Safari 10 · iPhone iOS 10.3.1
          1. 大致

            @木瓜园难度超过一个阀值就直接点叉了。

            Firefox 52 · Windows 7
            1. S̆̈

              @大致嗯,先把这当一个玩字用着吧……

              Wordpress App 7 · iPhone iOS 10.3.1
    3. 不亦乐乎

      @大致这个杠抬的好!

      Google Chrome 57 · Android 6.0
      1. S̆̈

        @不亦乐乎你捣乱 😡

        Wordpress App 7 · iPhone iOS 10.3.1
  2. fooleap

    精确到秒感觉很认真了。。。
    我感觉普通文章可以通过估算,勉强显示阅读需时,但一旦涉及到技术的文章,阅读时间可能就千差万别。
    比如你这篇文章,看完很快,但要理解代码估计费点时间了。

    Google Chrome 57 · Windows 7
    1. S̆̈

      @fooleap对,确实如此,其实这个功能也不是很严肃的功能,再者我也有心想把它整得更严肃点儿,只是没思路啊,难道设计图像识别和内容鉴定?给每种内容增加系数值? 😂

      Wordpress App 7 · iPhone iOS 10.3.1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注