[연재] Comments Evolved plugin에서 댓글 수를 합산

     이  글을 연재로 쓸 수 있을 것이라고 생각하지 않았는데 기대한  것 이상의 성과가 있어서 기록하기로  했다.

쉬운 것부터  차례로 언급한다.

(1)  debugging 을 위한 코드 변경

facebook 댓글이 호스팅 서버의 성격별로 그 결과가 달라지는 것을 확인하게되니 다양한 테스트를 위해서 댓글의 종류 별로 댓글 수를 화면에 표시하는 것이 좋겠다고 생각되어 총 댓글 수 합을 구하는 함수코드를 아래와 같이 변경했다.

function comments_evolved_get_total_count() {
 global $facebook_count;
  $total_count = 0;
  $facebook_count = 0;
    echo '
',"TOTAL comments : ", $total_count,'';
    echo "facebook comments ( intial value ): ", $facebook_count,'';
  $wordpress_count = comments_evolved_get_wordpress_count();
    echo "wp comments : ", $wordpress_count,'';
  $wp_pingbback_count = comments_evolved_get_wp_pingback_count();
    echo "pingback comments : ", $wp_pingbback_count,'';
  $gplus_count = comments_evolved_get_gplus_count();
    echo "Gplus comments : ", $gplus_count,'';
  $trackback_count = comments_evolved_get_trackback_count();
    echo " trackback comments : ",  $trackback_count,'';
  $facebook_count = comments_evolved_get_facebook_count();
    echo "facebook comments : ", $facebook_count,'';
  $disqus_count = comments_evolved_get_disqus_count();
    echo "disqus comments : ", $disqus_count,'';
 $total_count = $total_count + $wordpress_count + $wp_pingbback_count + $gplus_count + $trackback_count + $facebook_count + $disqus_count;
    echo "total comments  : ", $total_count,'';
  return $total_count;
}

      각 댓글 별로 댓글 수를 특정 변수에 넘겨 받는 코드가 나오면 바로 그 뒤에 그 값을 화면에 표시하게 하기 위해서 echo 명령을 삽입하는 것이다.  그리고 facebook  댓글의 경우에 어디서 문제가 있는 지를 확인하기 위해 총 댓글 수와 마찬가지로 초기 값으로 0을 입력하였으며 바로 뒤에 echo 코드를 주어 화면에 표시하게 하였다.

comments-evolved-comments-count-at-open-ssl-site-aesopc-kr
comments-evolved-comments-count-at-open-ssl-site-aesopc-kr

     이렇게 하면 글 머리 (heading)에서 댓글 수를 표시하기 위해 댓글 수를 계산하는 함수가 불려지기 때문에 위에서 추가해 준 echo 명령이 활성화되고 각 댓글 수가 화면에 표시된다.    이때  글쓴이 다음에 함수가 한번 불려지고 각 코드에서의 줄 바꿈 표시 <br> 때문에 차례로 각 댓글 수가 표시되며 다시 줄바꿈 된 이후에 댓글 표시 아이콘이 표시되고 총 댓글 표시 전에 또 한번 줄바꿈되고 댓글 수 표시가 반복된 이후에 원래의 댓글 수 표시와 글 편집 아이콘이 표시된다. (아마 함수가 두번 불려지는 모양이다.)

    (2) Gplus 댓글에 관해서 (  gplus 댓글의 해법은  우연하게 발견되었다. )

      이렇게 바꾼 후에 SSL 이 지원되는 호스트에서 FACEBOOK 댓글 수의 표기가 올바르게 되는지 확인하기 위해 이 코드를 그대로 사이트에 적용하고 접속하였더니 재미있는 현상이 관찰되었다.

comments-evolved-comments-count-at-open-ssl-site
comments-evolved-comments-count-at-open-ssl-site

     총 댓글 수와  facebook 댓글 수는 초기 값이 모두 영이고 최종적으로 각각의 댓글 수의 값으로 부터 총 댓글 수가 계산되어 ssl지원사이트에서는 facebook 댓글이 문제 없음을 알 수 있다.

그런데 조금 이상한 것이 보인다. GPLUS 댓글에는 숫자가 보이지 않고 ‘댓글‘ 이라고 표시되는 것이다. 이것은 코드 값이 뭔가 잘못된 것이 아닌가 의심하게 하는 결과이다.  코드를 유심히 들여다보니 최종적으로 값을 가져오는 함수가 이렇게 되어 있다.

' trim($count_arr[0]) '

    $count_arr[ ] 라는 어레이 중에서 첫 번째 것을 가져오라는 뜻인 것 같은데 … 그럼  두번째 것으로 가져오면 어떻게 될까? 프라켓 [Bracket] 안의 숫자를 ‘1’ 로 바꾸어 보았다.  예상 외의 성과였다.  올바른 값을 표시하고 있었다.

이것을 ssl을 지원하지 않는 서버에 적용하였다 .  ‘KOMENTAR’ 라고 표시된다. (구글 번역기에 넣었더니 보스니아어라고 감지된다. 영어로 번역하면 ‘COMMENT’ 란다. ㅋㅋ)

다시 원래의 값으로 되돌아왔다.  이것이 오히려 올바른 값을 표시한다.

최종적으로 코드는 이렇게 된다.

function comments_evolved_get_gplus_count($url = "") {
  include_once COMMENTS_EVOLVED_LIB . '/simple_html_dom.php';
  if(empty($url)){ $url = get_permalink(); }
  $link = 'https://apis.google.com/_/widget/render/commentcount?bsv&href=' . urlencode($url);
  $link_body = str_get_html(wp_remote_retrieve_body(wp_remote_get($link)));
  $count_raw = $link_body->find('#widget_bounds > span', 0);
  $count_arr = split(" ",$count_raw->plaintext);
  return trim($count_arr[0]); // option for SSL non-supported site (http://)
//  return trim($count_arr[1]); // option for SSL supported site (https://)
}

(서버에 따라서 선택적으로 코드를 달리해야 한다니 헐~~~)

[ 참고 ] : gplus 는  처음에는 Google Authorship 등록을 중요하게 생각해서 이를 시도해 보았지만 영~~ 어찌하는 것 인지 잘 알 수 없었기 때문에 그냥 Google Plus Authorship 라는 플러그인을 설치하였고 ‘사용자’ 란에서 아래 그림 같은 프로필 등록 창이 생성된 것을 확인하고 그 곳에 주소를 기입하였지만 또 뭔지 잘 작동하지 않는 느낌이다.   (어쩌면 이미 그것이 활성화 되었기 때문에 gplus 댓글 수가 올바르게 나타나고 있는 것 인지도 모를일이다. ) 나중에 조금 더 잘 알게되면 기록하겠다.

Google-plus-profile-url
Google-plus-profile-url’

   (3) wordpress 댓글과 pingback 에 관하여

       글을 쓰면서 글 속에서 다른 post의  주소를 링크 걸기하면 pingback 효과가 발생하며 그것이 원래 post의 관리자에게 메일이 발송되고 dashboard에 받아들일지 여부를 확인하게 한다.  받아들이면 이것은 마치 댓글처럼 관리되고 워드프레스의 기본 댓글 창에 핑백이라는 표시와 함께 기록된다. 하지만 플러그인의 댓글 수 합계에서는 누락되고 있다.  핑백을 댓글 창에서 제외하는 방법을 시도했지만 아직까지 성공하지 못하였고 따라서 우선은 핑백의 숫자도 총 댓글 수에 합산하여 표시하는 것이 좋겠다고 생각되어 핑백 수를 세는 함수를 추가해 주고 이를 합산 함수에 추가했다.

comments-evolved-wp-comments-window
comments-evolved-wp-comments-window

    그런데 또 한 가지 재미있는 현상은 댓글 창에 표시되는 댓글 수는 워드프레스 댓글 수가 아니라 총 댓글 수 라는 것이다. 그 뿐 아니라  header에서 표시되고 있는 것과 똑같은 방식으로 각각의 댓글이 표시되고있다.  이것은 분명히 frontend.php 파일에서 워드프레스 댓글 수를 불러오는 함수 대신에  대신에 총 댓글 수를 불러오는 함수를 대체하는 명령이 있기 때문이라고 생각되었다.   하지만 워드프레스 댓글 창에서는 이 효과를 잠시 제거하는 것이 마땅하다.

     codex.wordpress.org 사이트에서 add_filter 라고 검색해보니 관련 명령어에 remove_filter라는 명령이 있다. 앞에서 넣어준 add_filter 에서 add 대신에 remove 라고 만 바꾸어서 wordpress.php 파일의 맨 앞 줄에 넣었다.

remove_filter('get_comments_number', 'comments_evolved_get_total_count',4269);

   확인해보니 결과는 만족스럽다. ..

comments-evolved-wp-comments-window-remove-filter
comments-evolved-wp-comments-window-remove-filter

       총 댓글 수를 계산하는 함수를 불러오지 않으니 여러 댓글 수를 표시하던 것도 없어지고 워드프레스 관련 댓글 수만 표시된다. 다만 여기서 주의해야 할것이 있다.  맨 뒤의 우선 순위를 결정하는 숫자 (priority number, 즉  $priority ) 앞에서 add_filter 명령에 넣은 값과 같게 하는 것이 좋다.  만일 이 숫자가 add_filter 명령 보다  많이 작거나 하면 명령의 효과가 없다.

 (4) disqus 댓글

     ssl 지원 서버에서 혹시 gplus 댓글에서처럼 disqus 댓글에 무슨 다른 효과는 없는지 확인을 위해 디스커스 댓글을 달았다.  예전에 한번 설치했다가  플러그인 만 지워버린 것이기 때문에 예전에 등록해 두었던 shortname이 그대로 살아 있으므로 이것을 그대로 다시 사용했다.

      그런데 이번에는 디스커스 댓글이 전혀 댓글 수가 표시되지 않는 문제가 있었다.  혹시 코드를 달리해야하는 것은 아닌지 이리 저리 코드값을 변경해 보았지만 소득이 없었다.   머리가 아프다..

    혹시 댓글 수 계산하는 함수 코드 내부에 api key 값이 달라서 그런지도 모를일이다.  그걸 열심히 내 disqus 계정의 다른 값으로 바꿔보았지만 소득이 없다. 그럼 저 api key 값은 내가 disqus에 가입해서 받은 것이 아니라 코드개발자의 것이라는얘긴데… 찜찜하다. 개발자가 맘만 먹으면 내 블로그의 disqus 댓글에 관련되는 여러가지 사항들을   마음대로 열람할 수 있다는 뜻인데 …  확실하게 학인하기 위해서 다운 받아놓았던 플러그인 압축 파일을 압축 해제하고 frontend.php파일을 열어보았다.  거기 그대로 key값이 박혀있었다. key는 개발자의 것이다.  하지만 당장 시급한 것부터 처리하자.

    마지막 희망으로 디스커스 댓글을 완전히 삭제하고 새로 설치 하기로 했다. shortname도 완전히 지우고 새로 등록했다.  플러그인을 다시 설치했지만 예전 shortname 이 그대로 다시 살아났다. 지워버린 shortname이 새로 설치한 플러그인에 기록되어 있으미 아무리 플러그인을 지우고 해로 설치한들 댓글 시스템이 올바르게 작동할리가 만무하다.  이건 db의 option table에 관련 파라메터 들이 그대로 살아있기 때문에 발생하는 현상이다.

phpMyAdmin에 접속해서 option 항목을 열었다.   아이쿠~~ disqus라고 시작하는 항목이 다섯 개도 넘는다.  모두 지워버리고 플러그인 새로 설치.. 이제야 새로 등록한 shortname이 나타난다.   이걸 체크해서 등록하고  comment evolved 대쉬보드에서도 새로운 shortname으로 다시 입력 …. 이제야 댓글 수를 인식한다. ( shortname을 지우는 방법에 관해서는 이미 오래 전에 올린 글이있다.)

     이제 찜찜한 것 해결하기 위해  api key 값도 내가 새로 부여받아서 내걸 등록해보기로 했다..  우선 disqus.com  에 접속한 후에 기억을 더듬어서 api key 값 등록받는 곳을 찾아야한다.  어디였더라 ?

disqus.com-api-resistration
disqus.com-api-resistration

초기 페이지의 최하단에 가니 조그맣게 api라고 쓴게 보인다.  일단 눌러보자.

disqus.com-api-applications
disqus.com-api-applications

거기서 application 탭을 누르면 우측에 새로운 application을 등록하는 링크가 있다. (옆에 보니 예전에 뭔지도 모르고 application을 등록해놓고 그냥 버려둔 것도 있지만 이력도 모르고 그냥 쓰는 것 보다는 새로 등록하는 것이 안전하다.    등록 후에 public  key 라고 쓰인 곳 밑에 있는 숫자를 긁어서 코드 의 기존 것 위에 덥어 쓰기 한다 .   기왕이면  코드의 맨 앞에 http://  라고 된 것도 https:// 라고 바꾼다.

'https://disqus.com/api/3.0/threads/details.json?api_key=[ENTER-HERE-THE-NEWLY-RESISTORED-MY-OWN-PUBLIC-KEY-VALUE]. '&thread:link=' . urlencode($url);

이렇게…

결과는 양호… 훌륭하다.

(5) facebook 댓글

   facebook 댓글 수를 표시하는방법에 관해서 구글링해본 결과에 의하면

fb:comments-count href="ID);%20?>"> Comments

이런 코드는 화면에 댓글 수를 표시하고

 $number_of_fb_comment = "";

이런 코드는 변수에 댓글 수를 넘겨 준다는 것이다.

 저기서 변수가 얻은 값을 원래의 댓글수 계산 함수에 대신해서 넣어 주었지만  결과는 실패… 지금까지 이것 저것 이렇게 저렇게  테스트해 본 결과에 의하면 아무리 변형해 주어도 단순히 화면에 값을 표시하는 것 이외에 연산명령을 시도하면 그것은 작동을 멈추어버린다는 것을 알았다.  다른 변수에 값을 넘겨주더라도 그것을 다시 화면에 표시하는 것은 얼마든지 허용되지만  이 값을 가지고 연산을 시작하는 순간 덧셈의 경우에는  ‘0’ (영) 을 더한 결과가 되고 만다.

값을 직접 넘겨 주지않고 특정한 다른 변수가 FB 댓글 수와  같아질 때까지 값을 1씩 증가시키는 loop 를 작동시키면 1회 만 작동한 후에 loop 를 빠져나온다는 것이 확인되었다.   즉 값은 항상 1 이 된다.

       아쉽지만 ssl 지원이 되지않는 호스트에서는 페이스 북 댓글 수를 합산하지 못하므로 총 댓글 수 표시 뒤에 별도로 facebook 댓글 수를 병기하기로  했다.  이를 위해서 content.php 파일에  comments_popup_link 위치 뒤에 아래와 같이 코드를 삽입하였다.

$number_of_fb_comment = "ID) . " >";
 echo " & ",$number_of_fb_comment," FB comments" ;  ?>
comments-evolved-fb-comments-number
comments-evolved-fb-comments-number

     그렇게 한 후에  facebook 댓글이 하나 존재하는 글을 접속한 모습이다.

 글의 heading위치에 각 댓글 수가 표시되고 있고  총 댓글이 표시된 뒤에는 content.php 파일에 추가한 코드에 의해서 fb-comments 값이 표시되고 있다.  총 댓글을 계산하는 과정에서사용된 facebook 댓글 수 계산식은 여기서는 아무런 값도 넘겨 받지 못하고 있으나 content.php 파일에 추가한 코드에서는  $number_of_fb_comment 라는 변수에 값 1을 넘겨주고있다.  하지만 이것이 만약 다른 계산 수식에 의해서 연산이 시작되면 이 경우에도 올바른 연산결과가 얻어지지 않는다.

script-Intercepted-02
script-Intercepted-02

     위 그림은 comments_evolved_get_facebook_count() 함수를 wp-content/ plugins/ gplus-comments/ includes/ templates/ partials 디렉토리에 있는   facebook.php  파일의 끝 부분으로 옮긴 후에 댓글 창 위치에서 요소검사를 실행한  결과이다.  몇 개의 실행 명령이 보안과 관련하여 문제가 있어   실행 되지 않았음을 알 수 있다.   ssl 이 지원되지 않는 서버에서는  댓글 수를 다양하게  표시하지 못하게 하는 것이 facebook의 정책인 것으로 보인다.(2014.04.09 update : 이것에 관해서 약간의 오해가 있었다.   저기 주의문은 바로 위의 코드 즉 disqus.com 에 관한 것이다.  헌데 분명히 코드를 ‘https:// ‘ 라고 수정했는데 왜 이런 주의문이 계속뜨는지 아직 알 지 못한다.  )

더 진전된 내용이 생기면 업네이트 할 예정이다.

소셜댓글

Loading Disqus Comments ...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.