Press enter to see results or esc to cancel.

원래의 글 제목과 사이트의 title 태그를 다르게 표시하려면

html 문서에서 <head> 영역에 <title> 태그를 제대로 집어넣는 것은 중요합니다. 기본적인 몇 가지 이유를 적어보자면 다음과 같습니다.

  • 검색 엔진이 정보를 수집할 때 이 <title> 태그를 가져가고
  • 이용자의 브라우저에도 이 <title> 태그가 표시되며
  • 이용자가 즐겨찾기할 때도 이 <title> 태그의 내용이 기본값으로 설정됩니다.

워드프레스로 만든 웹사이트는 대부분 워드프레스 전체 제목과 함께 포스트나 페이지의 제목을 그대로 표시합니다.

일반적인 테마에서 <title> 태그 설정 방식

문서(포스트, 페이지)의 제목을 뿌려주는 워드프레스 함수는 wp_title() 이고, 따라서 대부분의 워드프레스 테마는 다음과 같은 방식으로 표현합니다.1

하지만, 가끔은 관리자 페이지에서 작성한 글(포스트 or 페이지)의 제목과 실제 웹사이트에서 보여지는 내용을 다르게 설정해야 할 때가 있습니다. 예를 들어 워드프레스 상에서의 글 제목은 “너와-나의-연결-고리”인데, 방문자가 보는 페이지의 <title> 태그에는 “너와 나의 연결 고리” 처럼 하이픈(-)을 빼야 한다면 어떻게 해야 할까요?

이럴 때는 필터를 이용해 wp_title() 함수를 건드리면 됩니다.2

wp_title()을 필터링하기

간단한 예를 들어보죠.

아래의 내용을 현재 이용 중인 테마의 functions.php 에 넣고 저장하면 어떤 결과가 나올까요.

위의 코드는 제목에 하이픈(-)이 들어있으면 공백 문자로 변경해서 제목을 표시해주도록 하는 코드입니다. $wp_query 를 통째로 이용할 수 있기 때문에 return 하기 전에 다양한 처리를 해줄 수 있습니다.

이처럼 쉽게 wp_title() 함수를 필터링하여 쉽게 제목 출력 설정을 변경할 수 있습니다.

한 가지 더.

<title> 을 표시하기 위해 wp_title()이라는 워드프레스 함수가 있기 때문에 그에 충실하게 적용을 한 것이지, <title>태그를 변경하기 위해 반드시 이런 식으로 처리를 하지 않아도 됩니다.  예를 들어 이런 식으로 해도 되죠.

사이트의 이름을 뽑는 함수와 포스트의 제목을 적는 함수를 함께 이용하는 겁니다.  하지만, 이런 식의 접근을 권장하지 않는 이유는 세 가지입니다.

  • 사이트의 첫 페이지인 경우에는 단순히 사이트의 이름만 표시해야겠죠. 그럼 뒷쪽 get_the_title() 부분에 조건문을 달아줘야 합니다.  이미 복잡한데 더 복잡해지겠죠.
  • 만약 수정해야 하는 조건이 더 많아질수록 저 구문이 들어있는 header.php 파일이 더 복잡해 질 겁니다.  역시 좋은 선택이 아니죠.
  • 워드프레스가 기본적으로 지원하는 함수라면 그에 맞는 필터를 쓰는 습관을 기르는 게 좋습니다.3 그게 워드프레스에서 필터를 만든 이유겠죠.

  1. wp_title() 에서 이용하는 파라미터는 codex를 참고하면 됩니다.

  2. 물론 <title> 태그를 설정하는 것 외에도 wp_title()이 쓰이는 곳은 많습니다.

  3. 하지만, 저도 귀찮아서 그냥 뜯어고칠 때가 많습니다. 어쩔 수 없을 때는 필터를 쓰지만요. orz