워드프레스 최신 글 목록에서 최근 발행된 글 제목 옆에 New 라벨을 표시하고 싶은 경우가 있을 수 있습니다. 그런 경우 the_title 훅을 사용하여 최신 글 제목에 신규 라벨 또는 아이콘을 표시할 수 있습니다.
[ 이 글은 2025년 3월 3일에 최종 업데이트되었습니다. ]
워드프레스 최신 글에 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 옵션의 주요 차이점:
- $date = get_post_time('U', true);
- 이 옵션(true)은 GMT(그리니치 평균시) 기준의 Unix 타임스탬프를 반환합니다.
- 전 세계적으로 동일한 시간을 나타내며, 시간대(표준 시간대)에 영향을 받지 않습니다.
- $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 코드를 이용할 경우 서버 사이드에서 작동하지만, 자바스크립트를 사용하면 서버 사이드 렌더링이 끝난 후에 렌더링이 되기 때문에 조금 지연되어 라벨이 추가되는 것처럼 보일 수 있습니다.
발행 날짜 말고 업데이트 날짜를 기준으로 정렬해도 발행일 기준으로 New 라벨이 추가되나요?
이 글에서는 발행 날짜를 기준으로 할 것 같습니다. 업데이트 날짜를 기준으로 하고 싶다면 챗GPT에 코드를 넣어서 수정을 요청하면 알아서 수정해줄 것 같습니다.😄
글이 발행된 지 2일(172800초) 이내로 설정해 뒀는데 왜 48시간이 아니고 36시간 정도 지나면 New 라벨이 사라질까요? 함수 코드를 사용하여 추가했습니다.
글 작성 시간이 어떻게 출력되는지 체크해보시기 바랍니다.
워드프레스 시간대 설정 등을 고려하여 코드를 챗GPT에 넣어서 수정해달라고 요청해보시겠어요?
$date = get_post_time('U', false); 이렇게 수정하니까 적용되네요^^
감사합니다, true를 false로 바꾸면 로컬 시간대(워드프레스에서 설정한 시간대)가 반영되어 제대로 적용되는 것 같네요. 본문에 이 내용을 추가하여 다시 발행했습니다😄
is_front_page랑 is_home이랑 무슨 차이점이 있나요?
is_front_page는 사이트의 전면 페이지를, is_home은 블로그 글 목록 페이지를 확인할 때 사용된다고 생각하면 될 것 같습니다.
최신 글 페이지(블로그 글 목록 페이지)를 홈으로 표시한 경우 이 두 값은 동일하게 될 것입니다.
전면 페이지 설정(홈 페이지 설정)은 설정 » 읽기에서 할 수 있습니다.
함수 코드 말고 자바 스크립트 코드를 WPCode 플러그인 푸터 부분에 추가해서 해결했습니다. 그런데 이렇게 하는 게 맞는 건지 모르겠네요 ㅎㅎ
아래의 코드로 라벨을 지우긴 했는데 인기글 제목 앞에 ’New”>’ 이거는 어떻게 지워야 하는지 모르겠습니다..ㅎㅎ
#right-sidebar .new-label {
display: none;
}
사이드바에서 댓글이 많이 달린 글(인기글)에는 표시를 안 하도록 하려면 어떻게 해야 하나요?
테마의 기능인가요, 아니면 플러그인의 기능인가요? 직접 사이트를 살펴보기 전에는 어떤 식으로 구현되어 있는지 확인할 수 없어 적절한 답변을 드릴 수 없는 점 양해 바랍니다.
https://avada.tistory.com/2544 이 링크에 나와있는 내용이요^^;
구체적으로 어떤 식으로 변경하기를 원하는지 조금 자세히 설명해주시겠어요?
네이버 카페에서 스크린샷을 올려 질문을 주시면 상황을 이해하는 데 도움이 될 것 같습니다.