워드프레스 최신 글에 New 라벨 표시하기

Last Updated: 2025년 03월 03일 14개 댓글

워드프레스 최신 글 목록에서 최근 발행된 글 제목 옆에 New 라벨을 표시하고 싶은 경우가 있을 수 있습니다. 그런 경우 the_title 훅을 사용하여 최신 글 제목에 신규 라벨 또는 아이콘을 표시할 수 있습니다.

[ 이 글은 2025년 3월 3일에 최종 업데이트되었습니다. ]

워드프레스 최신 글에 New 라벨 표시하기

일부 티스토리 스킨에서는 최신 글 리스트에서 최근에 발행된 글의 제목에 New 라벨 또는 아이콘을 표시하는 경우가 있습니다.

워드프레스에서는 몇 가지 방법으로 가능합니다.

워드프레스 최신 글에 New 라벨 표시하기

워드프레스 훅(Hook)을 사용하여 최신 글 타이틀에 New 라벨 추가하기

최신 글 리스트 페이지에서 최근 3일 이내에 발행된 포스트에 New 라벨을 표시하도록 해 보았습니다. 이렇게 New 라벨을 표시하고 싶은 경우 테마의 함수 파일에 다음과 같은 코드를 추가할 수 있습니다.

// 전면 페이지와 아카이브 페이지에서 최신 글에 New 라벨 표시하기 

add_filter('the_title', 'my_new_icon_title', 10, 2);
function my_new_icon_title($title, $id){
    // If it's not the front page or an archive page, return the original title.
   // 전면 페이지 또는 아카이브 페이지(카테고리, 태그 페이지 등)가 아닌 경우 원래 제목을 반환
    if (!is_front_page() && !is_archive()) {
        return $title;
    }

    // If it's not a post, return the original title.
    // 포스트가 아닌 경우 본래 제목 표시
    if (get_post_type($id) !== 'post') {
        return $title;
    }

    $date = get_post_time('U', true);
    // Check if the post was published within the last 259200 seconds (3 days).
    // 글이 발행된지 3일(259200초) 이내인지 체크
    if ((current_time('timestamp') - $date) <= 259200) {
       return $title . ' <span class="new-label">New</span>';
    }

    return $title;
}

만약 24시간 이내에 발행된 글의 제목에만 라벨을 표시하려면 상기 코드에서 숫자 "259200"를 "86400"으로 변경합니다. 숫자는 초를 의미하며 1일의 경우 60x60x24=86400이 됩니다. 2일 또는 7일 등으로 바꾸는 경우 이 숫자값을 적절히 변경할 수 있습니다.

상기 코드를 차일드 테마 내의 함수 파일(functions.php)에 추가하시기 바랍니다. 차일드 테마를 만들지 않고 부모 테마의 함수 파일에 직접 코드를 추가할 경우 추후 테마 업데이트 시 추가된 코드가 사라집니다.

시간이 맞지 않는 경우

예를 들어, 이틀 동안 New 라벨을 표시하도록 설정했지만 실제로는 2일이 지나기 전에 사라질 수 있습니다. 이 경우 상기 코드 중에서 다음 코드를 찾습니다:

$date = get_post_time('U', true);

이 코드 라인을 아래와 같이 true를 false로 변경하도록 합니다.

$date = get_post_time('U', false);

이렇게 수정하면 시간대가 워드프레스에서 설정한 로컬 시간대와 일치하여 제대로 작동할 것입니다.

워드프레스에서 get_post_time() 함수를 사용할 때 true와 false 옵션의 주요 차이점:

  1. $date = get_post_time('U', true);
    • 이 옵션(true)은 GMT(그리니치 평균시) 기준의 Unix 타임스탬프를 반환합니다.
    • 전 세계적으로 동일한 시간을 나타내며, 시간대(표준 시간대)에 영향을 받지 않습니다.
  2. $date = get_post_time('U', false);
    • 이 옵션(false)은 로컬 시간대 기준의 Unix 타임스탬프를 반환합니다.
    • 워드프레스 설정에서 지정된 사이트의 로컬 시간대가 적용됩니다.

그러므로 get_post_time('U', true);를 사용하면 워드프레스 관리자 페이지 » 설정 » 시간대 설정이 "서울"로 지정된 경우 9시간 정도 편차가 발생할 수 있습니다.

New 라벨의 스타일 지정하기

New 라벨의 스타일은 CSS를 사용하여 조정할 수 있습니다. 예:

/* new 라벨 */

.new-label {
  color: red;
  font-size: 0.5em;
  margin-left: 5px;
}

GeneratePress 테마에서는 상기 그림의 New 라벨과 비슷하게 표시됩니다. 다른 테마에서도 비슷하게 적용이 가능합니다. (테마에 따라 글자 크기 등이 조금 달라질 수 있을 것입니다.)

자바스크립트를 사용하여 New 라벨 추가하기

엘리멘터 프로의 Posts 위젯이나 직접 코드를 만들어 글 목록을 표시하는 등 the_title 필터를 사용하여 포스트 타이틀을 제어할 수 없는 경우에는 자바스크립트를 사용하여 New 라벨이나 아이콘을 표시하는 것을 고려해 볼 수 있습니다.

예를 들어, 다음은 최신 글 리스트에서 첫 페이지 페이지의 글 리스트에서만 최신 글 제목 옆에 New 라벨을 추가하는 기능을 합니다.

<script>
document.addEventListener("DOMContentLoaded", function() {
    // Check if the URL has the pagination pattern
    if (!window.location.href.match(/page\/\d+/)) {
        // 1. Get all articles from the page
        const articles = document.querySelectorAll('article');

        articles.forEach(article => {
            // 2. For each article, fetch the published date
            const publishedDateElem = article.querySelector('.entry-date.published');
            
            // Check if the publishedDateElem exists
            if (publishedDateElem) {
                const publishedDate = new Date(publishedDateElem.getAttribute('datetime'));
                
                // 3. Get the current date and calculate the difference in days
                const currentDate = new Date();
                const timeDiff = currentDate - publishedDate;
                const dayDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));

                // 4. If the difference is less than or equal to 2 days, append "New" label to the title
                if (dayDiff <= 2) {
                    const entryTitle = article.querySelector('.entry-title');
                    const newLabel = document.createElement('span');
                    newLabel.textContent = " New";
                    
                    // Add the 'new-label' class to the element
                    newLabel.classList.add('new-label');

                    entryTitle.appendChild(newLabel);
                }
            }
        });
    }
});
</script>

코드는 상황에 따라 적절히 변경하시기 바랍니다. 위의 코드는 발행일과 현재 날짜를 비교하여 2일 이내에 발행되었다면 New 라벨이 표시됩니다.

PHP 코드를 이용할 경우 서버 사이드에서 작동하지만, 자바스크립트를 사용하면 서버 사이드 렌더링이 끝난 후에 렌더링이 되기 때문에 조금 지연되어 라벨이 추가되는 것처럼 보일 수 있습니다.

참고

작성자 아바타

워드크래커는 전문 영한번역가로 활동하고 있으며 10년 이상 워드프레스 관련 정보를 제공하는 워드프레스 정보꾸러미 블로그를 운영하고 있다. 또한, ‘워드프레스를 사용하는 사람들’ 네이버 카페도 관리하고 있다.

14 개 댓글

Leave a Comment

    • 이 글에서는 발행 날짜를 기준으로 할 것 같습니다. 업데이트 날짜를 기준으로 하고 싶다면 챗GPT에 코드를 넣어서 수정을 요청하면 알아서 수정해줄 것 같습니다.😄

      응답
  1. 글이 발행된 지 2일(172800초) 이내로 설정해 뒀는데 왜 48시간이 아니고 36시간 정도 지나면 New 라벨이 사라질까요? 함수 코드를 사용하여 추가했습니다.

    응답
    • 글 작성 시간이 어떻게 출력되는지 체크해보시기 바랍니다.
      워드프레스 시간대 설정 등을 고려하여 코드를 챗GPT에 넣어서 수정해달라고 요청해보시겠어요?

      응답
      • 감사합니다, true를 false로 바꾸면 로컬 시간대(워드프레스에서 설정한 시간대)가 반영되어 제대로 적용되는 것 같네요. 본문에 이 내용을 추가하여 다시 발행했습니다😄

    • is_front_page는 사이트의 전면 페이지를, is_home은 블로그 글 목록 페이지를 확인할 때 사용된다고 생각하면 될 것 같습니다.

      최신 글 페이지(블로그 글 목록 페이지)를 홈으로 표시한 경우 이 두 값은 동일하게 될 것입니다.

      전면 페이지 설정(홈 페이지 설정)은 설정 » 읽기에서 할 수 있습니다.

      응답
  2. 함수 코드 말고 자바 스크립트 코드를 WPCode 플러그인 푸터 부분에 추가해서 해결했습니다. 그런데 이렇게 하는 게 맞는 건지 모르겠네요 ㅎㅎ

    응답
  3. 아래의 코드로 라벨을 지우긴 했는데 인기글 제목 앞에 ’New”>’ 이거는 어떻게 지워야 하는지 모르겠습니다..ㅎㅎ

    #right-sidebar .new-label {
    display: none;
    }

    응답
카카오톡 상담 카톡 서비스 상담