워드프레스에서 최종 업데이트 날짜로 표시하기

이 블로그를 보면 글을 최종 수정한 날짜로 표시되도록 해놓았다. 글 수정할 때마다 매번 발행날짜를 건드리지 않고, 그냥 업데이트만 누르면 최종 수정한 시간 정보를 읽어서 날짜를 보여주는 방법이다.

언론사 뉴스 페이지를 보면 발행일과 최종 수정시각을 같이 표시하는 경우가 많은데, 블로그에 그렇게 둘 다 표시했더니 발행일로만 긁어가고 날짜 업데이트가 안되는 경우가 있다. 아예 한가지만 표시되게 하는게 검색엔진이 헷갈리지 않는 것 같다.

다음의 코드를 복사해서 넣는 것으로 글 업데이트를 누르면 그 시점으로 최종 수정일이 반영되어 날짜 부분에 보이도록 할 수 있다.

최종 날짜 표시 소스코드

// Display 'Last Modified Date' in GeneratePress
// GeneratePress 테마에서 업데이트 날짜 표시하기
add_filter( 'generate_post_date_output', function( $output, $time_string ) {
    $time_string = '<time class="entry-date published" datetime="%1$s" itemprop="datePublished">%2$s</time>';

    if ( (get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) && is_singular( 'post' ) ) {
        $time_string = 'Last Updated on <time class="entry-date updated-date" datetime="%3$s" itemprop="dateModified">%4$s</time>';
    }

    $time_string = sprintf( $time_string,
        esc_attr( get_the_date( 'c' ) ),
        esc_html( get_the_date() ),
        esc_attr( get_the_modified_date( 'c' ) ),
        esc_html( get_the_modified_date() )
    );

    return sprintf( '<span class="posted-on">%s</span> ',
        $time_string
    );
}, 10, 2 );

위 부분을 외모 > 테마파일 편집기 > 차일드 테마 > functions.php 안에 넣어주도록 한다. 이는 제너레이트 프레스 프리미엄 테마를 기준으로 만들어진 소스 코드이다. 다른 테마나 프리미엄이 아니면 제대로 동작하지 않을 수 있다.

/* 최초작성일 최종수정일 표시영역 */
.entry-meta{
	display:none;
}
.single .entry-meta{
	    display: inline-block;
}

위 코드는 외모 > 사용자 정의하기 > 추가 CSS 영역에 넣어주도록 한다. GP Premium 테마에서 실제로 글작성 날짜가 표시되는 부분을 정의해주는 CSS이다.

소스코드 설명

add_filter( ‘generate_post_date_output’, function( $output, $time_string ) { … }, 10, 2 );

이 줄은 워드프레스의 add_filter 함수를 사용하여 ‘generate_post_date_output’이라는 필터를 추가한다. 이 필터는 GeneratePress 테마에서 글의 날짜 출력을 커스터마이징 하는 데 사용된다.

function( $output, $time_string ) { … } 부분은 필터의 콜백 함수로, 실제 글의 날짜 출력을 변경하는 로직을 포함한다. 10, 2는 필터의 우선 순위와 콜백 함수가 받는 인자의 개수를 나타낸다.

$time_string = ‘%2$s’;

기본적인 시간 문자열 형식을 설정한다. HTML에서 날짜와 시간을 표현하기 위한 태그이다. %1$s와 %2$s는 나중에 실제 날짜 데이터로 치환될 자리 표시자이다.

if ( (get_the_time( ‘U’ ) !== get_the_modified_time( ‘U’ ) ) && is_singular( ‘post’ ) ) { … }

글이 수정된 경우, 즉 최초 발행 날짜와 최정 수정 날짜가 다른 경우에만 실행되는 조건문이다. get_the_time( ‘U’ )는 글의 원래 게시 시간을, get_the_modified_time( ‘U’ )는 글의 수정 시간을 Unix 타임스탬프 형식으로 반환한다. is_singular( ‘post’ )는 현재 페이지가 단일 글 페이지인지 확인합니다.

$time_string = ‘Last Updated on %4$s’;

조건문 안에서 $time_string을 수정된 형식으로 변경한다. “Last Updated on” 문구와 함께 수정된 날짜를 태그로 표시한다. %3$s와 %4$s는 수정 날짜 데이터로 치환될 자리 표시자이다.

$time_string = sprintf( $time_string, … );

sprintf 함수는 $time_string에 있는 자리 표시자를 실제 날짜 데이터로 대체한다.

  • esc_attr( get_the_date( ‘c’ ) ) : 원래 게시 날짜
  • esc_html( get_the_date() ) : 원래 게시 날짜
  • esc_attr( get_the_modified_date( ‘c’ ) ) : 수정된 날짜
  • esc_html( get_the_modified_date() ) : 수정된 날짜

return sprintf( ‘%s ‘, $time_string );

이 줄은 최종적으로 날짜를 태그 안에 포함시켜 반환한다. $time_string은 앞서 설정한 날짜 형식을 포함한다.

이렇게 하면 날짜가 최종 수정일 기준으로 표시된다. 최근 날짜 기준으로 글목록이 정렬되도록 하는 소스코드도 추가하면 수정한 글이 가장 최근날짜가 되어 맨 위에 보여지게 만들수도 있다.

0 0 투표
Article Rating

0 Comments
Inline Feedbacks
댓글 모두 보기