WordPress 显示发布内容于多少时间前
这个标题很难表达我想要显示的效果,所以大家可以先去我的“给我留言”页面看一下,请注意留言时间的显示格式,细心的童鞋已经发现了,在24小时以内发布的留言会显示成“**时间 前”这样的格式,而发布超过24小时的评论则如往常一样显示时间格式。这让你想到了什么?对,没错,就是论坛,比较人性化的一个效果。这个效果要感谢 happyet 童鞋,因为此方法就是修改于他的文章:《换个方式显示日志发表时间和回复时间》,正好我也借此机会解答了他在文中的问题,并且小小的扩展一下。
首先在 WordPress 主题文件夹下的 functions.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');
}
}
?>
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');
}
}
?>
函数定义好了,接下来就是在需要的地方调用此函数即可。
先说说我用到的函数,我是在 WordPress 的评论中用到这个效果,那就在 functions.php 中的 mytheme_comment() 函数中找到评论日期显示的代码:
<?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?>
如果你还只是符合 WordPress 2.7 以下的主题,那就在 comments.php 中找到这句代码。然后用以下代码替换:
<?php if (function_exists('time_since')) {
echo time_since(abs(strtotime($comment->comment_date_gmt . "GMT")), time());
}
?>
echo time_since(abs(strtotime($comment->comment_date_gmt . "GMT")), time());
}
?>
如果你还想要使发布的 WordPress 日志也有这样的时间显示格式,那就在 index.php、single.php 等文件中找到相应的时间函数,并用以下代码替换:
<?php if (function_exists('time_since')) {
echo time_since(abs(strtotime($post->post_date_gmt . "GMT")), time());
}
?>
echo time_since(abs(strtotime($post->post_date_gmt . "GMT")), time());
}
?>
另外,你可能已经注意到了右上角 Twitter 最新消息那里,我也用到了这个效果,用过 Twitter 的童鞋应该知道,Twitter 本身就是这样显示发布消息的时间,这样一来就和 Twitter 更像了吧,呵呵。
更多的应用效果就留给同学们自己去开发挖掘吧,欢迎留言试,也欢迎刷新本页看变化的时间格式。
-
Wordpress 之欢迎 OOXX 归来2011年01月19日 -
Wordpress 评论数之排排坐吃果果2010年12月1日 -
给 Wordpress 评论框添加 TinyMCE 编辑器2010年10月3日 -
Wordpress 最新评论与您的足迹二体合一2010年09月5日
Pingback: WordPress 显示评论发表于多少时间前的 php 代码 | Xgraf
您好。这段显示相对时间的代码 能不能用在侧边栏最新评论上呢?麻烦回复一下。谢谢
恩,完全可以呀,我以前的主题上就是这么干的
我的意思是你在哪个你写的最新twitter的代码里怎么调用
twitter这个功能我写过四五篇文章,站内搜索就可以找到,方法很多的,挑选适合你的吧
呵呵 我不太会调用时间~现在已经折腾出来了
谢谢!
灰常想知道twitter怎么调用
谢万戈了
果然我原来问过没理我 为什么我用这个在comment上 一天之外的时间显示的不是评论时间而是文章发表时间呢
呃。。。真不好意思啊,当初一定不知道你是美女,现在就回答你:
在评论部分调用的时间应该把函数部分最后的the_time('Y-m-j G:i');改成:
printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time());
我用这个为什么显示的时间不正确呢 居然显示7月。。。
额......我用那个主题好难搞,博主提到的函数找不到啊~~~请求帮助~
先确认一下你的主题是不是支持2.7+吧,不是所有主题的模板函数都一样的
Pingback: Wordpress非插件实现相对时间 » Willin Studio
测试下效果
看到效果了没?
看到啦
我一直以为我是爱折腾的人,没想到牛人在这
呵呵,过奖了,我这只是瞎折腾呗
WP专家啊,有业务找你。
呵呵,过奖啊,专家可谈不上,只是爱折腾罢了
我看标题完全不知道要写什么,原来是这么回事
测试一下万戈兄的ajax回复会不会这样显示。
我没有改,要改的话在commens-ajax.php里
我回来了,老万很强悍!!!
嘿嘿,不知是不是你要的效果呀
上网环境极其不便,先留一脚吧。
改天也把我的给弄上去
喜欢可以试试哈
借用小章鱼的一句话。
老胸,新年快乐。
过来找插件,没找到,飘过了。
呵呵,新年快乐啦,找啥插件呀?
嘿嘿,小邪发现万戈兄在迅速强力起来鸟 ~ 加油 ~
这个效果很人性化啊。
啊.. 这个效果不错~~
章鱼童鞋灌水还是那么猛烈呀……
想我啦
我也喜欢这样,有时间也折腾下。
我日~~feedsky害我没看到更新!!!!擦
我看了所有人的feedsky,都挂了。。。
半夜feedsky 复活喽~~~
等到我醒来又挂了。。。。
看到要抢沙发的博客但有是feedsky烧录的
订http://wange.im/feed
我好像把我饭碗砸了
挺不错,但我现在嫌代码太多了,今天修改了一下主题连css我都嫌太大了
嫌CSS太大的话就和我一样做吧,把CSS分开来
分开?就是说要用时才加载么?
是的,用个判断把不同页面的CSS区分开来,我的做法是首页一个,日志页一个,友链页面再一个,这样单个CSS会比较小,但是,以后修改就要麻烦咯,三思而行呀,这方法除了适合我这样爱折腾的人以外估计没人会用,呵呵
不适合我,因为几K的东东就不这样在意了,觉得累,其实是懒
为啥用我的Chrome 5.0.322.2 dev灌水会报错?
我用chrome回复你试试
我是在gg chrome的官方下载的,最新版本是4.0.249.89耶,你的Chrome版本为什么会高出我这么多
因为我在当Google的小白鼠啊~在玩开发者版本……
难怪呢,无视此版本
下水道都没有了
这个能让日志显示多少时间之前吗?
可以啊,文中也有介绍
今晚按照这个来试试,欧野!!
functions.php和comments.php都找不到那串代码
每个主题各有不同,但是大同小异,总之是调用时间的那串代码
前面又只是一个人啊
哼
不是吧。 我魅力这么巨大啊。 都吓跑了
我邮箱已经7封了
过年了都这么客气啊
我觉得我邮箱会被某些人暴
肯定不是我,不过闪闪的星最近没有来暴,你放心吧
闪闪的星 654楼。。 我真怕了
所以,你还不知道啥叫爆邮箱
祝万戈胸越长越帅 找个像我一样好的老婆
还有一楼 即将完成指标
果然宝刀未老
原来我可是沙发王
哼 让你们欺负我
哪有
顺便把10楼抢光 哈哈
这个15秒倒计时怎么实现的
willin大师的comments-ajax.php文件里带这个功能
mark
哈哈哈
算是了结心愿鸟
也是我的啊………………
给钱 我给你开后门
昨天在外甥家看到这里没沙发,刚想抢来着,结果他的电脑就出毛病了……回家发现此处粉红一片……
命中注定不能杀花~
SF
正好,修改版测试