[워드프레스] KBoard 게시물에 댓글이 달렸을 때 알림 메일 전송하기

케이보드 이메일 알림

들어가며

케이보드(Kboard)는 우리나라에서 많이 사용되는 워드프레스용 게시판 플러그인입니다. 외국에서는 bbPress와 같은 포럼이 주로 사용되지만 우리나라에서는 한국형 게시판을 원하는 경우 KBoard와 같은 게시판 플러그인이 사용됩니다.

원하는 경우 다음 글을 참고하여 bbpress 포럼을 게시판 형태로 수정할 수 있습니다.

작년 중순까지 이 블로그에 bbPress를 한국형 게시판 형태로 개조하여 사용하다가 테마를 여러 번 변경하는 과정에서 이전 테마와 호환이 잘 안 되어 더 이상 사용하지 않고 있습니다.

SEO(검색엔진최적화)를 중요시 한다면 bbPress를 게시판 형태로 바꾸어 사용하는 것도 좋은 방법 같습니다. 소스는 여기에서 다운로드할 수 있습니다. 테마에 따라 잘 작동하지 않을 수 있고 수정이 필요할 수 있습니다.

이 글에서는 다음 두 가지 상황에 대해 다룹니다.

  1. 댓글 작성 시 원글 게시자에게 이메일 알림을 보내고 싶은 경우
  2. 사용자가 올린 게시물에 관리자가 답변을 달면 사용자에게 알림 메일이 전송되도록 하고 싶은 경우

댓글 작성 시 원글 게시자에게 이메일 알림 전송

먼저 댓글 작성 시 원글 게시자에게 이메일 알림을 보내고 싶은 경우 다음 코드를 사용 중인 워드프레스 함수 파일(functions.php)에 추가하도록 합니다. 물론 차일드 테마(자식 테마; 하위 테마)를 만든 상태에서 작업해야 추후 업데이트 시 수정 내용이 사라지지 않습니다(참고).

add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 2);
function my_kboard_comments_insert($insert_id, $content_uid){
$comment = new KBComment();
$comment->initWithUID($insert_id);
$document = new KBContent();
$document->initWithUID($content_uid);

if($document->member_uid){
$user = new WP_User($document->member_uid);

if($user->user_email && $user->ID != get_current_user_id()){
if(!class_exists('KBMail')){
include_once KBOARD_DIR_PATH . '/class/KBMail.class.php';
}

$url = new KBUrl();
$mail = new KBMail();
$mail->to = $user->user_email;
$mail->title = "[댓글알림] {$document->title}";
$mail->content = $comment->content;
$mail->url = $url->getDocumentRedirect($document->uid);
$mail->send();
}
}
}

위의 코드는 원글 작성자가 회원일 경우 해당 회원에게 이메일 알림을 보내는 코드이고 게시글 작성자 본인이 댓글을 남기면 이메일이 오지 않을 것입니다.

비회원에 대하여 고려하는 위의 코드를 참고로 추가로 코딩 작업을 해주어야 할 것입니다. (가령, 우선 비회원인 경우 이메일을 받는 필드부터 만들어 주어야 할 것입니다.)

자세한 내용은 다음 KBoard 포럼 글을 참고해보세요.

  • http://www.cosmosfarm.com/threads/document/12558
  • http://www.cosmosfarm.com/threads/document/11766

관리자가 댓글에 답변을 달면 원 댓글 작성자에게 이메일 알림 전송하기

관리자가 댓글에 답변을 달면 원 댓글 작성자에게 이메일 알림을 전송하고 싶은 경우 두 가지 상황을 생각해볼 수 있습니다.

회원만 게시판에 글을 작성할 수 있는 경우

댓글을 단 사용자가 회원이라면 다음과 같은 코드를 사용 중인 워드프레스 테마의 함수 파일(functions.php)에 추가하도록 합니다.

add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 2);
function my_kboard_comments_insert($comment_uid, $content_uid){
$comment = new KBComment();
$comment->initWithUID($insert_id);

if($comment->parent_uid){
$parent = new KBComment();
$parent->initWithUID($comment->parent_uid);

if($parent->user_uid){
$user = new WP_User($parent->user_uid);

if($user->user_email && $user->ID != get_current_user_id()){

$title = '등록하신 댓글에 답변이 등록되었습니다.'; // 알림 이메일 제목
$content = '등록하신 댓글에 대해 답변이 등록 되었습니다.'; // 알림 이메일 본문 내용
wp_mail($user->user_email, $title, $content);
}
}
}
}

비회원이 댓글을 남기는 경우

회원이 아닌 사용자가 단 댓글에 답변을 달 때 알림 메일이 전송되도록 하려면 먼저 비회원이 댓글을 남길 때 이메일 정보를 받아야 합니다.

다음 코드를 사용 중인 워드프레스 테마의 함수 파일(functions.php) 파일에 추가하면 아마 댓글 입력창에 이메일 입력 필드가 출력될 겁니다.

add_action('kboard_comments_field', 'my_kboard_comments_field', 5, 4);
function my_kboard_comments_field($field_html, $board, $content_uid, $comment_builder){
if(!is_user_logged_in()){
$current_user = wp_get_current_user();
if(!$current_user->user_email){
?>
<div class="comments-field">
<label class="comments-field-label" for="comment_option_email">이메일</label>
<input type="email" id="comment_option_email" name="comment_option_email" value="" placeholder="이메일..." required>
</div>
<?php
}
}
}

그런 다음 아래 코드를 테마의 함수 파일(functions.php)에 추가하면 회원 또는 입력받은 이메일 주소로 이메일이 전송됩니다.

add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 2);
function my_kboard_comments_insert($comment_uid, $content_uid){
$comment = new KBComment();
$comment->initWithUID($comment_uid);

if($comment->parent_uid){
$parent = new KBComment();
$parent->initWithUID($comment->parent_uid);

if($parent->user_uid){
$user = new WP_User($parent->user_uid);

if($user->user_email && $user->ID != get_current_user_id()){

$title = '등록하신 댓글에 답변이 등록 되었습니다.';  // 알림 이메일 제목
$content = '등록하신 댓글에 대해 답변이 등록 되었습니다.'; // 메일 본문 내용
wp_mail($user->user_email, $title, $content);
}
}
else if($parent->option->email){

$title = '등록하신 댓글에 답변이 등록 되었습니다.'; // 알림 이메일 제목
$content = '등록하신 댓글에 대해 답변이 등록 되었습니다.'; // 메일 본문 내용
wp_mail($parent->option->email, $title, $content);
}
}
}

참고:

일부 글에 제휴 링크가 포함될 수 있으며 파트너스 활동으로 일정액의 수수료를 받을 수 있습니다.

4개 댓글

  1. 안녕하세요.

    본문의 글이랑은 다른 내용을 문의드려 죄송합니다.

    간단한 사이트를 하나 만들어야 해서 작업중인데요.

    도메인이 한글이면 워드프레스에서 정상적으로 작동하지 않는 경우도 있는지 궁금합니다.

    제가 테마 데모를 타겟 사이트로 잡고 동일한 레이아웃으로 작업을 하고 있습니다.

    여러 페이지로 구성은 되어 있지만 메인페이지에서는 한페이지 형태입니다.

    데모에서는 헤더에서 메뉴를 누르면 해당 위치로 이동을 합니다.

    제가 작업하고 있는 사이트에서는 이동을 하지 않고 있습니다.

    도메인이 한글이라서 이동을 안하는것인지 궁금합니다.

      1. 네 알겠습니다.
        알려주신 방법을 사용해서 한번 해보도록 하겠습니다.

        감사합니다.

댓글 남기기

* 이메일 정보는 공개되지 않습니다.