侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

框架(架构)  /  管理员 发布于 7年前   117

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

So…..
Go…..
交道麻袋…..评论日期和文章日期调用函数不同,下面以评论日期为例,文章日期请自行调整。

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

用法:

 

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

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

雏形版改善实现

 //将你的评论时间显示的函数改成如下就可以了

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

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

  //将你的评论时间显示的函数改成如下就可以了

增强版
那么我们能不能再增强一下呢?
为什么增强?
好吧,因为我这个人比较较真,觉得中文显示日期不好看,影响到我的排版,喜欢英文显示日期,而中文版的 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;

时间判断代码改为如下:

  //将你的评论时间显示的函数改成如下就可以了

显示评论、文章相对时间

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

相对时间函数

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

您可能感兴趣的文章:

  • 使用CDN和AJAX加速WordPress中jQuery的加载
  • WordPress JQuery处理沙发头像
  • 利用jQuery实现WordPress中@的ID悬浮显示评论内容
  • 详解WordPress中调用评论模板和循环输出评论的PHP函数
  • WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
  • 解决WordPress使用CDN后博文无法评论的错误
  • 编写PHP脚本来实现WordPress中评论分页的功能
  • 在WordPress中实现评论头像的自定义默认和延迟加载
  • WordPress中利用AJAX异步获取评论用户头像的方法
  • WordPress中限制非管理员用户在文章后只能评论一次
  • 使用jQuery实现WordPress中的Ctrl+Enter和@评论回复


  • 上一条:
    Codeigniter控制器controller继承问题实例分析
    下一条:
    深入解析WordPress中加载模板的get_template_part函数
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客