워드프레스 2.7에서 댓글과 트랙백을 분리하여 출력


얼마전 등록한 워드프레스 2.7 이후의 댓글 출력 환경글에서 나아가 좀 더 입맛에 맞는 댓글 출력 환경을 제공하는 몇가지 방법을 소개해 보려 한다.

관련 글

  1. 워드프레스 2.7 이후의 댓글 환경 첫번째
  2. 댓글과 트랙백(핑백)의 분리(현재 글)
  3. 댓글 페이지 탐색을 번호로 표시하기(준비중)
  4. Rely(응답) 링크 자바스크립트 적용(준비중)

댓글과 트랙백의 분리

아직은 구현하는데 불편함이 있어 일반 이용자 보다는 테마제작자에게 그 기능을 활용 할 것을 제안하고 있다는 느낌을 주고 있는 기능이 있는데, 그 중 개인적으로 관심이 가는 것은 댓글과 트랙백(핑백)을 나눠주는 기능이다.

wp_list_comments() 함수를 살펴본 적이 있다면 알 수 있듯이, 함수 자체에서도 일반 댓글과 트랙백 중 원하는 것만 출력해 줄 수 있는 ‘type’ 이라는 설정변수를 가지고 있다.

 null, 'max_depth' => '', 'style' => 'ul', 'callback' => null, 'end-callback' => null, 'type' => 'all',
		'page' => '', 'per_page' => '', 'avatar_size' => 32, 'reverse_top_level' => null, 'reverse_children' => '');

또한, 댓글 템플릿을 불러오는 comments_template() 함수에서도 댓글을 종류별로 분리할 것인지를 지정하는 설정변수가 존재한다.

즉, 따로 플러그인을 만들거나 함수를 만들지 않아도 기본적으로 댓글과 트랙백을 분리 할 수 있는 것이다.

이제, 댓글과 트랙백을 분리하는 작업을 시작해 보기로 하자.

single.php(page.php) 파일 수정

우선, 템플릿 파일('/comments.php')파일을 불러 올 때, 댓글과 트랙백을 분리해서 출력할지도 모르니 댓글들을 미리 분리해 놓으라고 해 둘 필요가 있다. 물론 미리 말 해 두지 않아도 되지만, 미리 지정해 두는게 좋다.

여기서는 single.php 만을 설명하지만, 사용중인 테마의 템플릿 파일들중 함수가 포함된 파일이 있다면 모두 수정하도록 한다.

single.php 파일을 열어 부분을 찾아 아래와 같이 수정한다.


comments.php 파일 수정

우선 지난 글에서 댓글 목록 출력부분을 2.7에 맞게 수정하였다면 아래와 같을 것이다.

	
	

이 목록에서는 우선 댓글만 출력하기로 하고 아래와 같이 type 변수를 추가한다. 테마에 따라서 기본적으로 다른 설정 변수가 있을 수도 있으나.

	
	

이제 그 아래 또는 위 중 원하는 곳에 트랙백(핑백)의 목록을 출력하는 내용을 추가하면된다. 참고로, 핑백과 트랙백 또한 분리하여 출력 할 수 있지만 여기서는 두가지를 함께 출력하기로 하자. (핑백: type=pingback, 트랙백: type=trackback, 핑백+트랙백: type=pings)

	
	

'ol'의 클래스(class)를 지정할 때 댓글 목록과 트랙백(핑백) 목록을 똑같이 출력하려면 댓글과 같이 class="commentlist" 라고 지정하면 되지만, 이와 다르게 출력하려면 class="pinglist" 와 같이 구분하여 줄 필요가 있다.

여기서 생각해 봐야 할 문제가 생긴다. 보통은 if (have_comments()) 조건을 통해서 댓글이 존재하는지 확인하고 없다면 'No comments(댓글이 없습니다)' 등의 문구를 표현하는데, 댓글과 트랙백(핑백)을 분리해 놓았으니, 각각에 내용물이 있는지를 또 확인해 줘야만 한다는 것이다.

예를들어 해당 글에 댓글은 없고 트랙백만 존재한다면 댓글 목록 부분은 HTML 에러를 발생하면서 목록을 감싸주는 태그만 덩럴 남아있게 되는 것이다.

	

이 문제를 해결하기 위해서, 댓글 목록 출력 부분과 트랙백(핑백)목록 출력 부분을 아래와 같이 조건을 붙여 감싸준다.

comments_by_type['comment'])) { ?>
	
comments_by_type['pings'])) { ?>

여기까지만 해도 일단, 댓글과 트랙백(핑백)이 분리되어 표시되긴 하지만, 아직은 살짝 모자란 감이 있는 듯 하다. 우선, 댓글은 등록자가 사람이고? 트랙백(핑백)은 등록자가 어떤 사람이 등록한 이 되기 때문에, 댓글 등록자의 이름 부분이 상대적으로 굉장히 길어지는 경우도 많고, 내용 또한 그러하다.

트랙백(핑백) 목록 출력 방식 변경

wp_list_comments() 함수에서는 목록의 출력을 좀 더 유연하게 하기 위하여 callback, end-callback 설정 변수를 제공하고 있다. 이 변수에 자신이 등록한 함수의 이름을 등록하면, 목록내의 개별 댓글의 출력 방식을 자신의 함수로 대체 할 수 있게된다.

우선 개별 트랙백(핑백)의 출력 내용이 간단하게 아래와 같다고 가정해 보자.

트랙백 발송한 블로그 | 트랙백 등록시간 | 편집

pinglist-kiss-theme-082net

사용중인 테마폴더에서 functions.php파일을 열어(없다면 새로 한 만들면 된다.) 맨 아래에(또는 원하는 곳에) 아래와 같은 새로운 함수를 하나 추가한다.
(함수 이름은 입맛에 맞게 지정해 주면 됨)

	
  • id="comment-"> | comment_approved == '0') { ?>Your comment is awaiting moderation. , ',''); ?>

    이제, wp_list_comments 함수에 자신이 등록한 함수를 callback 변수에 넣어주면 된다.

    	
    	
    

    좀 더 자신의 입맛에 맞게 바꾸려면 워드프레스 댓글 템플릿 함수 페이지를 참고해서 도전해 보세요.


  • 4 responses to “워드프레스 2.7에서 댓글과 트랙백을 분리하여 출력”

    1. 헉 ㅡ.ㅡ; 글이 코드가 잘려버리네요. 다시 올려봅니다. 쿨럭;;

      좋은 글 덕분에 도움 많이 받았습니다.
      그런데 계속 에러가 나서 며칠을 해맸는데 해결을 했습니다.
      php 에 대해서는 아무것도 모르다보니.. ㅜ.ㅡ

      이 부분을

      이렇게 고치니까 정상적으로 동작이 되더라구요.
      ” 하나가 빠진것인지, 아니면 우연히 뭔가와 맞아들어서 된 것인지는 모르겠네요. ^^

      블로깅을 하려면 이제 php도 공부를 해야 하는건가.. 흑 -_-;

    2. 좋은 글 덕분에 도움 많이 받았습니다.
      그런데 계속 에러가 나서 며칠을 해맸는데 해결을 했습니다.
      php 에 대해서는 아무것도 모르다보니.. ㅜ.ㅡ

      이 부분을

      이렇게 고치니까 정상적으로 동작이 되더라구요.
      ” 하나가 빠진것인지, 아니면 우연히 뭔가와 맞아들어서 된 것인지는 모르겠네요. ^^

      블로깅을 하려면 이제 php도 공부를 해야 하는건가.. 흑 -_-;