워드프레스 블로그에 외국어 댓글 차단하기

블로그를 운영하다 보면 광고 댓글이 골칫거리인 경우가 많다. 심지어 블로그 글에 정상적인 댓글보다 광고 댓글(스팸)이 더 많은 경우가 대부분이다.

워드프레스의 스팸댓글 차단하는 방법

워드프레스로 만든 블로그에서 스팸댓글을 차단하는 방법은 여러 방법이 있다. 그리고 그 중 두 방법을 앞의 글에서 소개한 바 있다.

하나는 워드프레스 자체의 스팸 댓글 차단기능을 활용하는 방법(보러가기)이다. 댓글이나 제목 그리고 작성자 등에 포함되는 문자열을 기준으로 스팸으로 인식시켜 휴지통으로 보내거나 승인 대기열로 보내는 방법이다.

다른 하나는 댓글을 작성한 사용자의 IP 또는 웹 브라우저의 user agent 정보를 웹서버의 설정 중 하나인 .htaccess 파일에 등록해서 차단하는 방법이다. (보러가기)

하지만 이 방법들은 매우 지루한 싸움이고 끝나지 않는 싸움이 될 공산이 크다.

외국어 댓글 차단

댓글과의 싸움은 매우 지루하고 끝나지 않는 싸움이다. 그래서 조금 더 획기적인 방법이 없을까를 고민하다가 한 가지 방법을 생각해냈다. 스팸댓글의 99%가 외국어라는 점에 착안해 그냥 외국어 댓글을 무조건 차단하는 것이다.

즉 한글이 하나도 포함되어 있지 않은 댓글의 경우 작성하지 못한다는 메시지를 보여주고 저장되지 않도록 하거나 댓글을 작성하지 못한다는 메시지를 보여주고 바로 휴지통으로 보내는 것이다.

만약 외국어 댓글이 작성될 이유가 전혀 없다면 전자를, 혹시라도 외국인이 외국어로 댓글을 작성할 가능성에 대비하고 싶다면 후자를 택하는 것이다.

이런 기능을 수행하기 위해서는 워드프레스에 일부 소스 코드를 추가해야 한다. 그렇다고 해서 서버에 SSH 접속하고 코드를 찾아 직접 편집하는 그런 수고가 필요하지는 않다. 다음과 같이 워드프레스의 관리자페이지에서 수정할 수 있다.


먼저 아래 화면처럼 워드프레스의 관리자 페이지에서 “모양” 메뉴의 “테마 파일 편집기”로 들어간다.

“테마 파일 편집기” 메뉴로 가면 화면 왼쪽에 “테마 파일” 목록이 보인다. 그 파일 중에서 functions.php 파일을 선택한다.

바로 이 화면에서 보라색으로 표시된 위치에 코드를 추가해주면 된다. 이 화면의 보라색 부분은 두 가지 방법 중 후자인 한글이 포함되지 않은 댓글은 휴지통으로 보내고 화면에는 “You are not authorized to reply on this blog.” 라는 메시지를 보여주는 코드가 추가된 것이다.

외국어 댓글 작성 원천 차단하기

먼저 한글이 포함되어 있지 않은 댓글은 저장 버튼을 누르더라도 저장되지 않고 댓글을 작성할 수 없다는 메시지를 보여주는 코드다.

아래의 코드를 앞 화면의 보라색 부분 처럼 추가해주면 된다. function.php 파일의 가장 아래쪽 부분이다. 화면의 경우 iconic One 테마의 function.php 파일인데 다른 테마도 동일하게 가장 하단부분에 추가하는 것이 추후 다시 추가하거나 찾기에 수월하다.

add_filter( 'preprocess_comment', function( $commentdata ) {

    $txt_reply = $commentdata['comment_content'];

    $bool_foreign = false;

    if ( ! preg_match( "/[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]+/u", $txt_reply) ) {
        $bool_foreign = true;
    }

    if ( $bool_foreign ) {
        wp_die(
            '<p><strong>Sorry, You are not authorized to reply on this blog.</strong></p>',
            'Failed to write reply',
            array('back_link' => true)
        );
    }
    return $commentdata;

}, 10 ); 

이 코드를 추가하고 화면 가장 아래의 “파일 업데이트” 버튼을 클릭해 적용한 다음 한글이 포함되지 않은 댓글을 작성하면 화면에 “You are not authorized to reply on this blog.”와 같은 메시지를 표시하고 댓글은 저장되지 않는다.


외국어 댓글은 휴지통으로 보내고 메시지 보여주기

혹시라도 정상적인 외국어 댓글이 차단되는 것을 예방하기 위해 일단 휴지통으로 보낸 다음 동일한 메시지를 화면에 표시하고자 한다면 아래의 코드를 추가하면 된다. 휴지통의 댓글은 검토 후 복원할 수 있고 댓글이 대댓글을 작성하면 작성자의 이메일 주소로 대댓글 작성을 알려주는 통지 메일을 보내도록 할 수 있다.

add_filter( 'preprocess_comment', function( $commentdata ) {

    $txt_reply = $commentdata['comment_content'];

    $bool_foreign = false;

    if ( ! preg_match( "/[\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]+/u", $txt_reply) ) {
        $bool_foreign = true;
    }

    if ( $bool_foreign ) {

	$commentdata['comment_approved'] = 'trash';
	add_action( 'comment_post', function( $comment_id ) {

            wp_trash_comment( $comment_id );

            wp_die(
                '<p><strong>Sorry, You are not authorized to reply on this blog.</strong></p>',
                'Failed to write reply',
                array( 'back_link' => true )
            );
        }, 10, 1 );
    }
    return $commentdata;
}, 10 ); 

마찬가지로 이 코드를 보라색 부분에 추가해 주면 된다.

외국어 댓글 작성 시 표시 화면

한글이 한글자도 포함되어 있지 않은 외국어 댓글을 작성할 경우 작성자에게는 다음과 같은 화면이 표시된다.

그리고 만약 두 번째 방법을 적용했다면 동일한 화면이 보이게 되지만 작성한 댓글은 휴지통으로 이동되어 저장된다.

#워드프레스 #스팸댓글차단

답글 남기기

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