加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

优化WordPress中文章与评论的时间显示

发布时间:2020-12-13 04:10:38 所属栏目:PHP教程 来源:网络整理
导读:《:优化WordPress中文章与评论的时间显示》要点: 本文介绍了:优化WordPress中文章与评论的时间显示,希望对您有用。如果有疑问,可以联系我们。 很多博客都喜欢用 评论发表于 “XXX 分钟 之前”、文章发表于 “XXX 分钟 之前”来显示文章评论的时间,改善

《:优化WordPress中文章与评论的时间显示》要点:
本文介绍了:优化WordPress中文章与评论的时间显示,希望对您有用。如果有疑问,可以联系我们。

很多博客都喜欢用 评论发表于 “XXX 分钟 之前”、文章发表于 “XXX 分钟 之前”来显示文章评论的时间,改善的时间显示方式不仅能很直观的告诉读者这篇文章或评论发表距今已有多长时间,更能增强评论回复的时间感,哥很喜欢,因为前一阵子压在手里的东西太多了,工作日日间又苦于不能上网,所以主题的样式及功能部分一点一点的写拖了好长时间,最近这阵子刚好轮到折腾评论了,所以就逐步参照网上流行的样式一点一点的修改起来自己的评论样式和功能.PHP编程

So…..
Go…..
交道麻袋…..评论日期和文章日期调用函数分歧,下面以评论日期为例,文章日期请自行调整.PHP编程

改善的时间显示方式的原理
很简单,就是通过 WordPress 的一个内置的函数处理现在的时间和文章、评论颁发的时间差,显示距今有X分钟、X小时、X天.
这个函数就是 human_time_diff ()PHP编程

用法:PHP编程

 <?php human_time_diff( $from,$to ) ;?>

说明:
判断两个时间标志的差异.
以人类可阅读的格式,如“1小时”、“5分钟”、“两天”,返回$from和$to 两个时间变量的时间差.PHP编程

从英文上也很好理解:from 到 to 嘛.(这句是很废吧,哈哈.)PHP编程

雏形版改善实现PHP编程

 //将你的评论时间显示的函数改成如下就可以了
<?php echo human_time_diff( get_comment_time('U'),current_time('timestamp')) ;?>

所有的日期都计算时间差,很暴力吧?PHP编程

初级版的实现方法
简单的加一个判断,如果评论时间没有超过一天则显示XX小时之前,如果超过一天则显示原始日期.
这样比较人性化吧?总不能让读者总掰着指头算38天之前是什么日子吧?哈哈!
代码:PHP编程

 <?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 函数里既没有留钩子,也没有预留一个不汉化的参数,所以我们想要显示英文的话,只有两个方法:PHP编程

直接修改 human_time_diff 函数,让汉化失效,这样做太暴力,而且以后升级了还要再进去改,伦家不喜欢.
重写一个本身的 human_time_diff 函数,绕过汉化.
function.php 里面强力插入如下代码: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编程

 <?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 ;?>

显示评论、文章相对时间PHP编程

根据上面的版本、下面的这个应该算是增强改进版吧,因为要达到效果还是必要在主题里添加代码,所以还没到终极版,哈哈.
函数代码如下:PHP编程

相对时间函数
PHP编程

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',$mins);
  } else if (($diff <= 86400) && ($diff > 3600)) {
    $hours = round($diff / 3600);
    if ($hours <= 1) {
      $hours = 1;
    }
    $since = sprintf(_n('%s Hour',$hours);
  } elseif ($diff >= 86400) {
    $days = round($diff / 86400);
    if ($days <= 1) {
      $days = 1;
    }
    $since = sprintf(_n('%s Day',$days);
  };
  $since .= $after ; 
  return $diff < $ago_time ? $since : $late ;
}endif;

使用办法
将上述代码插入到你主题的function.php文件中
然后在你想显示相对时间的地方调用该函数即可.
函数最少输入设定一个参数 即$type 类型字符串? ‘cmt'(评论时间)或'art'(文章时间)
示例:PHP编程

 //最简单的调用
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','之前的评论',get_comment_time('Y-n-j'));
//2天内的输出成果: 3 Hours 之前的评论 
//2天后的输出成果: 2015/12/26

编程之家培训学院每天发布《:优化WordPress中文章与评论的时间显示》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读