워드프레스 블로그를 운영하다 보면 하루에 10개가 넘게도 쌓이는 스팸 댓글 때문에 골머리를 앓는 게 한두 번이 아닙니다.
블랙리스트를 사용해 특정 단어들만 차단해둬도 9할은 차단하긴 합니다만, 가끔 괴상한 내용으로 블랙리스트를 피하는 댓글이 있습니다.
Akismet 등의 스팸 차단 플러그인도 괜찮은 선택지일 수 있겠지만, 한글로 블로그를 운영하면 굳이 무거운 플러그인 붙여다 스팸을 차단할 필요가 있나 싶습니다.
글 작성자도 한글을 쓰니, 정상적인 댓글 작성자도 한글을 쓰게 되어있습니다. 스팸 댓글 봇은 - 아직 제가 본 것들에 한하면 - 한글을 쓰지 않기에, 한글 포함 여부만 확인하면 대부분을 거를 수 있습니다.
functions.php 수정
function filter_comments_without_kr($comment_ID, $comment_approved, $commentdata)
{
if (1 === $comment_approved) {
$comment = get_comment($comment_ID);
$text = $comment->comment_content;
$pattern = "/[ㄱ-ㅎ|가-힣]/i";
if (!preg_match($pattern, $text)) {
wp_delete_comment($comment_ID, true);
}
}
}
댓글이 추가되면 checkPostedComment가 실행되고, 승인된 댓글에 한글이 없으면 차단하는 코드입니다.
대괄호 안의 내용을 바꾸면 조금 더 세분화하여 차단할 수 있습니다.
[가-힣]
: 자모를 합쳐 온전한 글자가 있을 때만 차단하지 않습니다. (eg. 가나다)[ㄱ-ㅎ|가-힣]
: 위와 동일하나 초성만 있어도 차단하지 않습니다. (eg. ㄱㄱ)[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]
: 위와 동일하나 모음만 있어도 차단하지 않습니다. (eg. ㅖ)
결과
정상적으로 작동한다면 한글이 없는 댓글을 작성하면 바로 휴지통으로 갑니다.