时间:2021-07-01 10:21:17 帮助过:3人阅读
So…..
Go…..
交道麻袋…..评论日期和文章日期调用函数不同,下面以评论日期为例,文章日期请自行调整。
改善的时间显示方式的原理
很简单,就是通过 WordPress 的一个内置的函数处理现在的时间和文章、评论发表的时间差,显示距今有X分钟、X小时、X天。
这个函数就是 human_time_diff ()
用法:
<?php human_time_diff( $from, $to ) ;?>
说明:
判断两个时间标记的差异。
以人类可阅读的格式,如“1小时”、“5分钟”、“两天”,返回$from和$to 两个时间变量的时间差。
从英文上也很好理解:from 到 to 嘛。(这句是很废吧,哈哈。)
雏形版改善实现
//将你的评论时间显示的函数改成如下就可以了 <?php echo human_time_diff( get_comment_time('U') , current_time('timestamp')) ;?>
所有的日期都计算时间差,很暴力吧?
初级版的实现办法
简单的加一个判断,如果评论时间没有超过一天则显示XX小时之前,如果超过一天则显示原始日期。
这样比较人性化吧?总不能让读者总掰着指头算38天之前是什么日子吧?哈哈!
代码:
<?php //计算是否超过一天 注:86400是一天的总共的秒数 60秒X60分X24小时=86400秒 //如果觉得一天不够的话,请自行计算填上。 if (current_time('timestamp') - get_comment_time('U') < 86400 ) //一天之内显示的东西 {$cmt_time = human_time_diff( get_comment_time('U') , current_time('timestamp') ) . '-ago';} //超过一天这么显示 else{$cmt_time = get_comment_date( 'Y/n/j' ).' - '.get_comment_time('','',false);}; ;?> //将你的评论时间显示的函数改成如下就可以了 <?php echo $cmt_time ;?>
增强版
那么我们能不能再增强一下呢?
为什么增强?
好吧,因为我这个人比较较真,觉得中文显示日期不好看,影响到我的排版,喜欢英文显示日期,而中文版的 WordPress 汉化的真的是没有死角(汉化的真仔细),如果我们直接用 human_time_diff 函数输出的话,中文版的 WordPress 会将结果全部汉化显示XX小时XX天之前,这样很有可能会影响我们的排版,而且这个 human_time_diff 函数里既没有留钩子,也没有预留一个不汉化的参数,所以我们想要显示英文的话,只有两个办法:
直接修改 human_time_diff 函数,让汉化失效,这样做太暴力,而且以后升级了还要再进去改,伦家不喜欢。
重写一个自己的 human_time_diff 函数,绕过汉化。
function.php 里面强力插入如下代码:
//原函数的 day hour min 都是小写的, //我把这三个词的首写字母改成大写的,即Day Hour Min 就可以避开汉化了,你懂? if ( ! function_exists( 'xz_time_diff' ) ) : function xz_time_diff( $from, $to = '' ) { if ( empty($to) ) $to = time(); $diff = (int) abs($to - $from); if ($diff <= 3600) { $mins = round($diff / 60); if ($mins <= 1) { $mins = 1; } /* translators: min=minute */ $since = sprintf(_n('%s Min', '%s Mins', $mins), $mins); } else if (($diff <= 86400) && ($diff > 3600)) { $hours = round($diff / 3600); if ($hours <= 1) { $hours = 1; } $since = sprintf(_n('%s Hour', '%s Hours', $hours), $hours); } elseif ($diff >= 86400) { $days = round($diff / 86400); if ($days <= 1) { $days = 1; } $since = sprintf(_n('%s Day', '%s Days', $days), $days); } return $since; }endif;
时间判断代码改为如下:
<?php //只是把计算日期差异的函数名变了而已,其他同上。 if (current_time('timestamp') - get_comment_time('U') < 86400 ) {$cmt_time = xz_time_diff( get_comment_time('U') , current_time('timestamp') ) . '-ago';} else{$cmt_time = get_comment_date( 'Y/n/j' ).' - '.get_comment_time('','',false);}; ;?> //将你的评论时间显示的函数改成如下就可以了 <?php echo $cmt_time ;?>
显示评论、文章相对时间
根据上面的版本、下面的这个应该算是增强改进版吧,因为要达到效果还是需要在主题里添加代码,所以还没到终极版,哈哈。
函数代码如下:
相对时间函数
if ( ! function_exists( 'xz_time' ) ) : /** * 显示文章、评论相对时间的封装函数. *作者:XiangZi http://PangBu.com/ * @param $type 类型字符串 'cmt'或'art',用于定义显示的是评论时间还是文章时间。 * @param $ago_time 数字类型 用于定义显示相对时间的时间限制 默认为86400秒即一天。 * @param $after 字符串型 显示在相对时间之后的文字,默认为 ' - ago' * @param $late 字符串型 超过时间限制后显示的项目,默认为 get_the_time('Y/n/j - H:i')或get_comment_time('Y/n/j - H:i') * @return 返回字符串(相对时间或绝对时间) */ function xz_time ( $type = 'art', $ago_time = 86400 ,$after = ' - ago' , $late = '' ) { if ( $type === 'cmt' ){ $diff = (int) abs( get_comment_time('U') - current_time('timestamp')); if ( (!$late) || $late ==''){ $late = get_comment_time('Y/n/j - H:i');}; } if ( $type === 'art' ){ $diff = (int) abs( get_the_time('U') - current_time('timestamp')); if ( (!$late) || $late ==''){$late = get_the_time('Y/n/j - H:i');}; } if ( $diff <= 3600 ) { $mins = round($diff / 60); if ($mins <= 1) { $mins = 1; } /* translators: min=minute */ $since = sprintf(_n('%s Min', '%s Mins', $mins), $mins); } else if (($diff <= 86400) && ($diff > 3600)) { $hours = round($diff / 3600); if ($hours <= 1) { $hours = 1; } $since = sprintf(_n('%s Hour', '%s Hours', $hours), $hours); } elseif ($diff >= 86400) { $days = round($diff / 86400); if ($days <= 1) { $days = 1; } $since = sprintf(_n('%s Day', '%s Days', $days), $days); }; $since .= $after ; return $diff < $ago_time ? $since : $late ; }endif;
使用方法
将上述代码插入到你主题的function.php文件中
然后在你想显示相对时间的地方调用该函数即可。
函数最少输入设定一个参数 即$type 类型字符串 ‘cmt'(评论时间)或'art'(文章时间)
示例:
//最简单的调用 echo xz_time('cmt'); //一天内的输出结果: 3 Hours-ago //一天后的输出结果: 2015/12/26 - 20:01 //调用时长为2天内的相对时间,之前时间显示默认时间 echo xz_time('cmt',172800); //2天内的输出结果: 3 Hours-ago //2天后的输出结果: 2015/12/26 - 20:01 //调用时长为2天内的相对时间,相对时间之后显示 '之前的评论' echo xz_time('cmt',172800,'之前的评论'); //2天内的输出结果: 3 Hours 之前的评论 //2天后的输出结果: 2015/12/26 - 20:01 //调用时长为2天内的相对时间,之前时间显示为 年-月-日 echo xz_time('cmt',172800,'之前的评论',get_comment_time('Y-n-j')); //2天内的输出结果: 3 Hours 之前的评论 //2天后的输出结果: 2015/12/26