>백엔드 개발 >PHP 튜토리얼 >WordPress_php 팁에서 기사 및 댓글의 시간 표시 최적화

WordPress_php 팁에서 기사 및 댓글의 시간 표시 최적화

WBOY
WBOY원래의
2016-05-16 19:59:551104검색

많은 블로그에서는 "XXX분 전"에 게시된 댓글과 "XXX분 전"에 게시된 기사를 사용하여 기사 댓글의 시간을 표시하는 것을 선호합니다. 향상된 시간 표시 방식은 독자에게 이 기사나 댓글을 직관적으로 알릴 수 있을 뿐만 아니라 게시된 지 얼마나 되었나요? 댓글 답글의 시간감을 높일 수 있습니다. 얼마 전 손에 든 것들이 너무 많아 그동안 인터넷에 접속할 수 없었기 때문입니다. 근무일 중에 테마 스타일과 기능이 있어서 차근차근 작성하는데 시간이 오래 걸렸는데, 최근에는 제가 댓글을 달 차례가 되어서 점차 댓글 스타일과 기능을 기반으로 조금씩 수정해 갔습니다. 인터넷에서 유행하는 스타일.

그러니까…..
가…..
Jiaodao Sack... 댓글 날짜와 기사 날짜 호출이 다르게 작동합니다. 다음은 댓글 날짜를 예로 들었습니다. 기사 날짜를 직접 조정하세요.

시간 표시 개선 원리
매우 간단합니다. WordPress에 내장된 기능을 사용하여 현재 시간과 기사 또는 댓글이 게시된 시간 사이의 차이를 처리합니다. 지금부터 X분, X시간, X일을 표시합니다.
이 함수는 human_time_diff()

사용법:

 <&#63;php human_time_diff( $from, $to ) ;&#63;>

설명:
두 타임스탬프 간의 차이를 확인합니다.
두 시간 변수 $from과 $to 사이의 시간 차이를 "1시간", "5분", "2일"과 같이 사람이 읽을 수 있는 형식으로 반환합니다.

영어로도 이해하기 쉽습니다: from to to. (이 문장은 정말 쓸모가 없어요, 하하.)

프로토타입 버전 개선

 //将你的评论时间显示的函数改成如下就可以了
<&#63;php echo human_time_diff( get_comment_time('U') , current_time('timestamp')) ;&#63;>

모든 날짜는 시차를 두고 계산됩니다. 너무 폭력적이지 않나요?

주니어 버전 구현 방법
판단만 추가하면 댓글 시간이 하루 미만이면 XX시간 전이 표시되고, 하루 이상이면 원래 날짜가 표시됩니다.
이게 더 인간적인가요? 38일 이전의 날짜를 독자들에게 손가락으로 세게 할 수는 없습니다. 그렇죠? 하하!
코드:

 <&#63;php 
//计算是否超过一天 注:86400是一天的总共的秒数 60秒X60分X24小时=86400秒
//如果觉得一天不够的话,请自行计算填上。
if (current_time('timestamp') - get_comment_time('U') < 86400 )
//一天之内显示的东西
{$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);};
 ;&#63;>


 //将你的评论时间显示的函数改成如下就可以了
<&#63;php echo $cmt_time ;&#63;>

향상된 버전
그럼 좀 더 강화해볼까요?
왜 강화하나요?
글쎄요, 저는 좀 더 진지한 사람이기 때문에 중국어로 표시되는 날짜가 보기에 좋지 않고 레이아웃에 영향을 미친다고 생각합니다. 영어로 표시되는 날짜가 마음에 들고, WordPress의 중국어 버전에는 막다른 골목이 정말 없습니다( 중국어 버전은 정말 조심스럽습니다), 만약 우리가 직접적으로 human_time_diff 함수를 사용해 출력한다면, 워드프레스 중국어 버전은 XX시간 XX일 전 중국어 버전의 모든 결과를 표시할 것입니다. 이는 우리의 조판에 영향을 미칠 가능성이 높으며, 거기에 는 후크도 아니고 human_time_diff 함수에 예약된 중국어 버전도 아니므로 영어를 표시하려면 두 가지 방법만 있습니다.

중국어 버전을 무효화하기 위해 human_time_diff 함수를 직접 수정합니다. 이는 너무 폭력적이며 업그레이드 후 다시 수정해야 한다면 Lun 가족이 좋아하지 않습니다.
중국어 번역을 우회하도록 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;

시간 판단 코드가 다음과 같이 변경됩니다.

 <&#63;php 
//只是把计算日期差异的函数名变了而已,其他同上。
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);};
 ;&#63;>


 //将你的评论时间显示的函数改成如下就可以了
<&#63;php echo $cmt_time ;&#63;>

댓글과 기사의 상대적 시간 표시

위 버전에 따르면 다음 버전은 강화되고 향상된 버전으로 간주되어야 합니다. 효과를 얻으려면 여전히 테마에 코드를 추가해야 하기 때문에 아직 최종 버전은 아닙니다. 하하.
함수 코드는 다음과 같습니다.

상대시간 함수

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 &#63; $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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.