溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何優(yōu)化WordPress中文章與評論的時(shí)間顯示

發(fā)布時(shí)間:2021-09-02 09:41:22 來源:億速云 閱讀:187 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下如何優(yōu)化WordPress中文章與評論的時(shí)間顯示,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

改善的時(shí)間顯示方式的原理
很簡單,就是通過 WordPress 的一個(gè)內(nèi)置的函數(shù)處理現(xiàn)在的時(shí)間和文章、評論發(fā)表的時(shí)間差,顯示距今有X分鐘、X小時(shí)、X天。
這個(gè)函數(shù)就是 human_time_diff ()

用法:

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

說明:
判斷兩個(gè)時(shí)間標(biāo)記的差異。
以人類可閱讀的格式,如“1小時(shí)”、“5分鐘”、“兩天”,返回$from和$to 兩個(gè)時(shí)間變量的時(shí)間差。

從英文上也很好理解:from 到 to 嘛。(這句是很廢吧,哈哈。)

雛形版改善實(shí)現(xiàn)

 //將你的評論時(shí)間顯示的函數(shù)改成如下就可以了
<?php echo human_time_diff( get_comment_time('U') , current_time('timestamp')) ;?>

所有的日期都計(jì)算時(shí)間差,很暴力吧?

初級版的實(shí)現(xiàn)辦法
簡單的加一個(gè)判斷,如果評論時(shí)間沒有超過一天則顯示XX小時(shí)之前,如果超過一天則顯示原始日期。
這樣比較人性化吧?總不能讓讀者總掰著指頭算38天之前是什么日子吧?哈哈!
代碼:

 <?php 
//計(jì)算是否超過一天 注:86400是一天的總共的秒數(shù) 60秒X60分X24小時(shí)=86400秒
//如果覺得一天不夠的話,請自行計(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';}
//超過一天這么顯示
else{$cmt_time = get_comment_date( 'Y/n/j' ).' - '.get_comment_time('','',false);};
 ;?>


 //將你的評論時(shí)間顯示的函數(shù)改成如下就可以了
<?php echo $cmt_time ;?>

增強(qiáng)版
那么我們能不能再增強(qiáng)一下呢?
為什么增強(qiáng)?
好吧,因?yàn)槲疫@個(gè)人比較較真,覺得中文顯示日期不好看,影響到我的排版,喜歡英文顯示日期,而中文版的 WordPress 漢化的真的是沒有死角(漢化的真仔細(xì)),如果我們直接用 human_time_diff 函數(shù)輸出的話,中文版的 WordPress 會將結(jié)果全部漢化顯示XX小時(shí)XX天之前,這樣很有可能會影響我們的排版,而且這個(gè) human_time_diff 函數(shù)里既沒有留鉤子,也沒有預(yù)留一個(gè)不漢化的參數(shù),所以我們想要顯示英文的話,只有兩個(gè)辦法:

直接修改 human_time_diff 函數(shù),讓漢化失效,這樣做太暴力,而且以后升級了還要再進(jìn)去改,倫家不喜歡。
重寫一個(gè)自己的 human_time_diff 函數(shù),繞過漢化。
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);};
 ;?>


 //將你的評論時(shí)間顯示的函數(shù)改成如下就可以了
<?php echo $cmt_time ;?>

顯示評論、文章相對時(shí)間

根據(jù)上面的版本、下面的這個(gè)應(yīng)該算是增強(qiáng)改進(jìn)版吧,因?yàn)橐_(dá)到效果還是需要在主題里添加代碼,所以還沒到終極版,哈哈。
函數(shù)代碼如下:

相對時(shí)間函數(shù)

if ( ! function_exists( 'xz_time' ) ) :
/**
 * 顯示文章、評論相對時(shí)間的封裝函數(shù).
 * @param $type 類型字符串 'cmt'或'art',用于定義顯示的是評論時(shí)間還是文章時(shí)間。
 * @param $ago_time 數(shù)字類型 用于定義顯示相對時(shí)間的時(shí)間限制 默認(rèn)為86400秒即一天。
 * @param $after 字符串型 顯示在相對時(shí)間之后的文字,默認(rèn)為 ' - ago'
 * @param $late 字符串型 超過時(shí)間限制后顯示的項(xiàng)目,默認(rèn)為 get_the_time('Y/n/j - H:i')或get_comment_time('Y/n/j - H:i')
 * @return 返回字符串(相對時(shí)間或絕對時(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文件中
然后在你想顯示相對時(shí)間的地方調(diào)用該函數(shù)即可。
函數(shù)最少輸入設(shè)定一個(gè)參數(shù) 即$type 類型字符串  ‘cmt'(評論時(shí)間)或'art'(文章時(shí)間)
示例:

 //最簡單的調(diào)用
echo xz_time('cmt');
//一天內(nèi)的輸出結(jié)果: 3 Hours-ago 
//一天后的輸出結(jié)果: 2015/12/26 - 20:01
 
 
//調(diào)用時(shí)長為2天內(nèi)的相對時(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í)長為2天內(nèi)的相對時(shí)間,相對時(shí)間之后顯示 '之前的評論'
echo xz_time('cmt',172800,'之前的評論');
//2天內(nèi)的輸出結(jié)果: 3 Hours 之前的評論 
//2天后的輸出結(jié)果: 2015/12/26 - 20:01
 
//調(diào)用時(shí)長為2天內(nèi)的相對時(shí)間,之前時(shí)間顯示為 年-月-日
echo xz_time('cmt',172800,'之前的評論',get_comment_time('Y-n-j'));
//2天內(nèi)的輸出結(jié)果: 3 Hours 之前的評論 
//2天后的輸出結(jié)果: 2015/12/26

以上是“如何優(yōu)化WordPress中文章與評論的時(shí)間顯示”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI