優(yōu)化WordPress中文章與評(píng)論的時(shí)間顯示
很多博客都喜歡用 評(píng)論發(fā)表于 “XXX 分鐘 之前”、文章發(fā)表于 “XXX 分鐘 之前”來(lái)顯示文章評(píng)論的時(shí)間,改善的時(shí)間顯示方式不僅能很直觀的告訴讀者這篇文章或評(píng)論發(fā)表距今已有多長(zhǎng)時(shí)間,更能增強(qiáng)評(píng)論回復(fù)的時(shí)間感,哥很喜歡,因?yàn)榍耙魂囎訅涸谑掷锏臇|西太多了,工作日白天又苦于不能上網(wǎng),所以主題的樣式及功能部分一點(diǎn)一點(diǎn)的寫拖了好長(zhǎng)時(shí)間,最近這陣子剛好輪到折騰評(píng)論了,所以就逐步參照網(wǎng)上流行的樣式一點(diǎn)一點(diǎn)的修改起來(lái)自己的評(píng)論樣式和功能。
So…..
Go…..
交道麻袋…..評(píng)論日期和文章日期調(diào)用函數(shù)不同,下面以評(píng)論日期為例,文章日期請(qǐng)自行調(diào)整。
改善的時(shí)間顯示方式的原理
很簡(jiǎn)單,就是通過(guò) WordPress 的一個(gè)內(nèi)置的函數(shù)處理現(xiàn)在的時(shí)間和文章、評(píng)論發(fā)表的時(shí)間差,顯示距今有X分鐘、X小時(shí)、X天。
這個(gè)函數(shù)就是 human_time_diff ()
用法:
<?php human_time_diff( $from, $to ) ;?>
說(shuō)明:
判斷兩個(gè)時(shí)間標(biāo)記的差異。
以人類可閱讀的格式,如“1小時(shí)”、“5分鐘”、“兩天”,返回$from和$to 兩個(gè)時(shí)間變量的時(shí)間差。
從英文上也很好理解:from 到 to 嘛。(這句是很廢吧,哈哈。)
雛形版改善實(shí)現(xiàn)
//將你的評(píng)論時(shí)間顯示的函數(shù)改成如下就可以了 <?php echo human_time_diff( get_comment_time('U') , current_time('timestamp')) ;?>
所有的日期都計(jì)算時(shí)間差,很暴力吧?
初級(jí)版的實(shí)現(xiàn)辦法
簡(jiǎn)單的加一個(gè)判斷,如果評(píng)論時(shí)間沒有超過(guò)一天則顯示XX小時(shí)之前,如果超過(guò)一天則顯示原始日期。
這樣比較人性化吧?總不能讓讀者總掰著指頭算38天之前是什么日子吧?哈哈!
代碼:
<?php //計(jì)算是否超過(guò)一天 注:86400是一天的總共的秒數(shù) 60秒X60分X24小時(shí)=86400秒 //如果覺得一天不夠的話,請(qǐng)自行計(jì)算填上。 if (current_time('timestamp') - get_comment_time('U') < 86400 ) //一天之內(nèi)顯示的東西 {$cmt_time = human_time_diff( get_comment_time('U') , current_time('timestamp') ) . '-ago';} //超過(guò)一天這么顯示 else{$cmt_time = get_comment_date( 'Y/n/j' ).' - '.get_comment_time('','',false);}; ;?> //將你的評(píng)論時(shí)間顯示的函數(shù)改成如下就可以了 <?php echo $cmt_time ;?>
增強(qiáng)版
那么我們能不能再增強(qiáng)一下呢?
為什么增強(qiáng)?
好吧,因?yàn)槲疫@個(gè)人比較較真,覺得中文顯示日期不好看,影響到我的排版,喜歡英文顯示日期,而中文版的 WordPress 漢化的真的是沒有死角(漢化的真仔細(xì)),如果我們直接用 human_time_diff 函數(shù)輸出的話,中文版的 WordPress 會(huì)將結(jié)果全部漢化顯示XX小時(shí)XX天之前,這樣很有可能會(huì)影響我們的排版,而且這個(gè) human_time_diff 函數(shù)里既沒有留鉤子,也沒有預(yù)留一個(gè)不漢化的參數(shù),所以我們想要顯示英文的話,只有兩個(gè)辦法:
直接修改 human_time_diff 函數(shù),讓漢化失效,這樣做太暴力,而且以后升級(jí)了還要再進(jìn)去改,倫家不喜歡。
重寫一個(gè)自己的 human_time_diff 函數(shù),繞過(guò)漢化。
function.php 里面強(qiáng)力插入如下代碼:
//原函數(shù)的 day hour min 都是小寫的, //我把這三個(gè)詞的首寫字母改成大寫的,即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;
時(shí)間判斷代碼改為如下:
<?php //只是把計(jì)算日期差異的函數(shù)名變了而已,其他同上。 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);}; ;?> //將你的評(píng)論時(shí)間顯示的函數(shù)改成如下就可以了 <?php echo $cmt_time ;?>
顯示評(píng)論、文章相對(duì)時(shí)間
根據(jù)上面的版本、下面的這個(gè)應(yīng)該算是增強(qiáng)改進(jìn)版吧,因?yàn)橐_(dá)到效果還是需要在主題里添加代碼,所以還沒到終極版,哈哈。
函數(shù)代碼如下:
相對(duì)時(shí)間函數(shù)
if ( ! function_exists( 'xz_time' ) ) : /** * 顯示文章、評(píng)論相對(duì)時(shí)間的封裝函數(shù). *作者:XiangZi http://PangBu.com/ * @param $type 類型字符串 'cmt'或'art',用于定義顯示的是評(píng)論時(shí)間還是文章時(shí)間。 * @param $ago_time 數(shù)字類型 用于定義顯示相對(duì)時(shí)間的時(shí)間限制 默認(rèn)為86400秒即一天。 * @param $after 字符串型 顯示在相對(duì)時(shí)間之后的文字,默認(rèn)為 ' - ago' * @param $late 字符串型 超過(guò)時(shí)間限制后顯示的項(xiàng)目,默認(rèn)為 get_the_time('Y/n/j - H:i')或get_comment_time('Y/n/j - H:i') * @return 返回字符串(相對(duì)時(shí)間或絕對(duì)時(shí)間) */ 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文件中
然后在你想顯示相對(duì)時(shí)間的地方調(diào)用該函數(shù)即可。
函數(shù)最少輸入設(shè)定一個(gè)參數(shù) 即$type 類型字符串 ‘cmt'(評(píng)論時(shí)間)或'art'(文章時(shí)間)
示例:
//最簡(jiǎn)單的調(diào)用 echo xz_time('cmt'); //一天內(nèi)的輸出結(jié)果: 3 Hours-ago //一天后的輸出結(jié)果: 2015/12/26 - 20:01 //調(diào)用時(shí)長(zhǎng)為2天內(nèi)的相對(duì)時(shí)間,之前時(shí)間顯示默認(rèn)時(shí)間 echo xz_time('cmt',172800); //2天內(nèi)的輸出結(jié)果: 3 Hours-ago //2天后的輸出結(jié)果: 2015/12/26 - 20:01 //調(diào)用時(shí)長(zhǎng)為2天內(nèi)的相對(duì)時(shí)間,相對(duì)時(shí)間之后顯示 '之前的評(píng)論' echo xz_time('cmt',172800,'之前的評(píng)論'); //2天內(nèi)的輸出結(jié)果: 3 Hours 之前的評(píng)論 //2天后的輸出結(jié)果: 2015/12/26 - 20:01 //調(diào)用時(shí)長(zhǎng)為2天內(nèi)的相對(duì)時(shí)間,之前時(shí)間顯示為 年-月-日 echo xz_time('cmt',172800,'之前的評(píng)論',get_comment_time('Y-n-j')); //2天內(nèi)的輸出結(jié)果: 3 Hours 之前的評(píng)論 //2天后的輸出結(jié)果: 2015/12/26
- 使用CDN和AJAX加速WordPress中jQuery的加載
- WordPress JQuery處理沙發(fā)頭像
- 利用jQuery實(shí)現(xiàn)WordPress中@的ID懸浮顯示評(píng)論內(nèi)容
- 詳解WordPress中調(diào)用評(píng)論模板和循環(huán)輸出評(píng)論的PHP函數(shù)
- WordPress中鼠標(biāo)懸停顯示和隱藏評(píng)論及引用按鈕的實(shí)現(xiàn)
- 解決WordPress使用CDN后博文無(wú)法評(píng)論的錯(cuò)誤
- 編寫PHP腳本來(lái)實(shí)現(xiàn)WordPress中評(píng)論分頁(yè)的功能
- 在WordPress中實(shí)現(xiàn)評(píng)論頭像的自定義默認(rèn)和延遲加載
- WordPress中利用AJAX異步獲取評(píng)論用戶頭像的方法
- WordPress中限制非管理員用戶在文章后只能評(píng)論一次
- 使用jQuery實(shí)現(xiàn)WordPress中的Ctrl+Enter和@評(píng)論回復(fù)
相關(guān)文章
php接口數(shù)據(jù)加密、解密、驗(yàn)證簽名
這篇文章主要介紹了php接口數(shù)據(jù)加密、解密、驗(yàn)證簽名的相關(guān)資料,需要的朋友可以參考下2015-03-03PHP簡(jiǎn)單實(shí)現(xiàn)生成txt文件到指定目錄的方法
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)生成txt文件到指定目錄的方法,簡(jiǎn)單對(duì)比分析了PHP中fwrite及file_put_contents等函數(shù)的使用方法,需要的朋友可以參考下2016-04-04php字符串截取函數(shù)mb_substr用法實(shí)例分析
這篇文章主要介紹了php字符串截取函數(shù)mb_substr用法,結(jié)合實(shí)例形式分析了php使用mb_substr針對(duì)中文字符串截取與編碼控制相關(guān)操作技巧,需要的朋友可以參考下2019-06-06Laravel中l(wèi)og無(wú)法寫入問(wèn)題的解決
這篇文章主要介紹了Laravel中l(wèi)og無(wú)法寫入問(wèn)題的解決,文中給出了詳細(xì)解決方法供大家參考學(xué)習(xí),對(duì)大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06對(duì)PHP新手的一些建議(PHP學(xué)習(xí)經(jīng)驗(yàn)總結(jié))
這篇文章主要介紹了對(duì)PHP新手的一些建議,這是本人學(xué)習(xí)PHP過(guò)程中的經(jīng)驗(yàn)總結(jié),一切都源自切身體會(huì),需要的朋友可以參考下2014-08-08