换个方式显示日志发表时间和回复时间

LMS
1.6K+ 10

update 下文代码已经修改,可以实现人性化显示日志和回复的发表时间

通常的日志发表时间都显示为年月日的形式,这个方法是把它改成显示为几小时前、几天前或者几年前的形式,如我测试的时候是显示为This entry was posted 9 months ago,然后将回复的时间改成日志发表后多长时间回复的形式。代码是一个老外的博客上看到的,我测试了可以用,不过我是想时间超过24小时就显示为正常的年月日,可是本人不懂php,不知道怎么修改,只好放弃不用,发出来给感兴趣的人用了。

在主题文件夹下的function.php文件里最底部的 ?>前加入以下代码:

<?php
function time_since($older_date, $newer_date = false)
    {
    $chunks = array(
    //因为在24小时以外的我需要显示正常时间,所以这里用不到/年/月/周/天,需要的同学可以去掉以下注释符
    //array(60 * 60 * 24 * 365 , '年'),
    //array(60 * 60 * 24 * 30 , '月'),
    //array(60 * 60 * 24 * 7, '周'),
    //array(60 * 60 * 24 , '天'),
    array(60 * 60 , '小时'),
    array(60 , '分钟'),
    );
    $newer_date = ($newer_date == false) ? (time()+(60*60*get_settings("gmt_offset"))) : $newer_date;
    $since = $newer_date - $older_date;
    //当前时间与发布时间差,这里我取86400秒,即24小时
    if($since < 86400)
        {
        //显示时间的前半部分
        for ($i = 0, $j = count($chunks); $i < $j; $i++)
            {
            $seconds = $chunks[$i][0];
            $name = $chunks[$i][1];
            if (($count = floor($since / $seconds)) != 0)
                {
                break;
                }
            }
        $output = "$count {$name}";
        //显示时间的后半部分
        if ($i + 1 < $j)
            {
            $seconds2 = $chunks[$i + 1][0];
            $name2 = $chunks[$i + 1][1];
            if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0)
                {
                $output .= ", $count2 {$name2}";
                }
            }
        return $output." 前";
        //在24小时以外的时间显示格式
        }else{
            the_time('Y-m-j G:i');
            }
    }
?>

然后在你需要显示时间的地方用下面的代码替换,日志部分:

<?php if (function_exists('time_since')) {
echo time_since(abs(strtotime($post->post_date_gmt . "GMT")), time()) . " ago";
} else {
the_time('F jS, Y');
} ?>

判断语句是为了防止function.php文件里没加入那代码时无法显示,如果确认有加,可以去掉这个判断,看起来会更简洁点。

然后在comments.php里将回复的时间的地方替换成下面的代码,(这个可能有点麻烦,现在主题很少comments.php文件独立写了,都是调用wp默认的,只有单独写代码的才有的改):

<?php if (function_exists(‘time_since’)) {
echo time_since(abs(strtotime($comment->comment_date_gmt . “ GMT”)), time()) . “ ago”;
} else {
the_time(‘F jS, Y’);
} ?>

谁有24小时内倒序显示时间的方法分享一下,谢谢!

以上function.php部分代码由万戈修改:http://wange.im/show-time-since-in-wordpress.html

THE END

评论 10

  1. 为什么放到function.php 里面就打不开页面.....

  2. The7in
    🏅

    越来越感觉到最好的内容都是来自博客。好久都不逛论坛了。

  3. 超人
    🏅

    从万兄那跑来深究~~

  4. 万戈
    🏆🏅

    这个想法不错,有点像论坛回复时间的样子了,呵呵

    1. 要不你去整一个出来分享下?! :grin:

发表评论

Submit