大发有旧文《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

    回复

    • S̆̈

      江苏

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

      八年前 Google Chrome 56 · Mac OS X 10.12

      回复

    • S̆̈

      江苏

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

      八年前 Safari 10 · iPhone iOS 10.3.1

      回复

      • 大致

        美国

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

        八年前 Firefox 52 · Windows 7

        回复

        • S̆̈

          江苏

          @大致 这个只能靠猜了。

          八年前 Google Chrome 56 · Mac OS X 10.12

          回复

        • 木瓜园

          江苏

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

          八年前 Safari 10 · iPhone iOS 10.3.1

          回复

          • 大致

            美国

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

            八年前 Firefox 52 · Windows 7

            回复

            • S̆̈

              江苏

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

              八年前 Wordpress App 7 · iPhone iOS 10.3.1

              回复

  2. fooleap

    广东

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

    八年前 Google Chrome 57 · Windows 7

    回复

    • S̆̈

      江苏

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

      八年前 Wordpress App 7 · iPhone iOS 10.3.1

      回复

       

发表评论

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