英文版 WordPress 下 human_time_diff 函数的本地化
给侧边栏“最新文章”栏目的文章链接 <a> 标签中加了个 title 属性,用来在鼠标悬停时显示文章发布于多久以前,需要用到 time ago 函数,查到 WordPress 有原生函数 human_time_diff()
可以实现。由于用的是英文版 WordPress,把该函数代入到 title 属性值中,效果是这样的:
中文主题下看起来味道太怪了。
第一反应是挂载一个 en_US.mo 语言包的方式解决。可本来使用英文版 WordPress 就是考虑程序少加载文件能提升效率,挂载语言包就违背了初衷,因此换个方法。函数源码中可以看到自带过滤器:
return apply_filters( 'human_time_diff', $since, $diff, $from, $to );
所以用替换字符串的方式将其本地化:
function replaced_human_time_diff( $since ) {
$search = array( 'years', 'year', 'months', 'month', 'weeks', 'week', 'days', 'day', 'hours', 'hour', 'mins', 'min', 'seconds', 'second', );
$replace = array( '年', '年', '个月', '个月', '周', '周', '天', '天', '小时', '小时', '分钟', '分钟', '秒', '秒', );
$since = str_replace( $search, $replace, $since );
return $since;
}
add_filter( 'human_time_diff', 'replaced_human_time_diff', 10, 1 );
替换完成后再看,好像没什么问题了。
P.S. 真是觉得 WordPress 的钩子 (Hook) 机制 Nice 呀。
会代码的人就是不一般,问题都自己解决了!
@山野愚人居 自己哪搞得定,抄来抄去啦
对鸟叔来说,能用插件的不会费时间研究代码,因为我根本不会。
@鸟叔 会啥来啥,节约时间,岂不很好?
断更四个多月了
@青山 那还不赶快送我一首凉凉
WordPress5.1.1 ajax我都没解决……
@灰常记忆 我这也一样,一开启 ajax 评论翻页就会导致评论回复的链接出现问题,所以禁用掉了,只保留了 ajax 评论提交..
@灰常记忆 这个问题,张戈大佬给了最简洁的方法。
@青山 他的主题我看过,大佬的方案救不了
@sys 可以看看我博客的解决方案。
@后宫学长 好用已解决,感谢学长
@sys 那就好。