익명 글쓴이 및 댓글 작성자에게 익명 아이디 부여

안녕하세요.

 

현재 구현가능한 익명게시판 기능을 사용하여 기본값을 '익명'으로 해두었습니다. 가능하다면 글쓴이 및 댓글을 쓴 사람들에게 고유한 아이디를 부여해서 익명글을 쓴 사람이 글쓴이 인지 아닌지 구분할 수 있게 하고 싶은데요.

혹시 이런 기능을 만드려면 어떤 식으로 구현하면 될까요...? 표시되는 아이디를 난수값으로 대체하는 형식으로 하면 좋을것 같은데 난수는 작성 때 마다 바뀔테니 어떻게 해결해야할지 고민이 됩니다.

 

감사합니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요.

    1. 아래의 코드로 교체해서도 확인해보시겠어요?

    add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
    function my_kboard_comments_insert($insert_id, $content_uid, $board){
    	if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$content = new KBContent();
    		$content->initWithUID($content_uid);
    		
    		$comment = new KBComment();
    		$comment->initWithUID($insert_id);
    		
    		if(is_user_logged_in()){
    			if($comment->user_uid == $content->member_uid){
    				$comment->user_display = $content->member_display . ' (작성자)';
    			}
    			else{
    				$comment->user_display = uniqid();
    			}
    		}
    		else if(get_current_user_id() != $content->member_uid && $content->option->ip == kboard_user_ip()){
    			$comment->user_display = $content->member_display . ' (작성자)';
    		}
    		else{
    			$comment->user_display = uniqid();
    		}
    		$comment->update();
    	}
    }

     

    2. 특정 게시판에서만 쪽지 보내기 연동 기능을 제거하시려면

    올려주신 코드 대신 아래의 코드로 교체해보시겠어요?

    add_filter('kboard_user_display', 'kboard_user_message_link', 10, 5);
    function kboard_user_message_link($display, $user_id, $username, $plugin, $builder){
    	$board = $builder->board;
    	if(is_user_logged_in() && !$board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		if($user_id && $user_id != get_current_user_id()){
    			$display = sprintf('<a href="%s" title="쪽지 보내기">%s</a>', get_cosmosfarm_members_messages_url(array('to_user_id'=>$user_id, 'redirect_to'=>urlencode($_SERVER['REQUEST_URI']))), $display);
    		}
    	}
    	return $display;
    }

    위의 코드에서 !$board->id == '1' 부분의 숫자는

    쪽지 보내기 기능을 제외할 실제 게시판 id로 적용해보시겠어요?

    고맙습니다.

  • 안녕하세요~^^

    PHP uniqid 함수를 활용하시면 랜덤 문자열을 생성하실 수 있습니다.

    로그인 사용자는 게시글이나 댓글에 저장된 사용자를 구분할 수 있는 사용자 ID(숫자)로 구분하고

    비로그인 사용자는 IP로 댓글 작성자가 게시글 작성자와 일치하는지 체크하셔야 할 듯합니다.

     

    KBoard 게시글 및 댓글 작성자를 랜덤 문자열로 표시하시려면

    테마 쪽 functions.php 파일에 하단에

    아래의 코드를 추가해보시겠어요?

    add_action('kboard_document_insert', 'my_kboard_document_insert', 10, 4);
    function my_kboard_document_insert($content_uid, $board_id, $content, $board){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		if(!is_user_logged_in()){
    			$content->option->ip = kboard_user_ip();
    		}
    		
    		$content->member_display = uniqid();
    		$content->updateContent();
    	}
    }
    
    add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
    function my_kboard_comments_insert($insert_id, $content_uid, $board){
    	if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$content = new KBContent();
    		$content->initWithUID($content_uid);
    		
    		$comment = new KBComment();
    		$comment->initWithUID($insert_id);
    		
    		if(is_user_logged_in()){
    			if($comment->user_uid == $content->member_uid){
    				$comment->user_display = $content->member_display . ' (작성자)';
    			}
    		}
    		else if($content->option->ip == kboard_user_ip()){
    			$comment->user_display = $content->member_display . ' (작성자)';
    		}
    		$comment->update();
    	}
    }

    위의 코드에서 $board_id == '1' 부분과 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.

     

    테마 쪽 functions.php 파일은

    워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 편집하실 수 있습니다.

     

    만약, 워드프레스 관리자 페이지에서 테마 쪽 functions.php 파일을 수정할 수 없다면

    모든 플러그인을 비활성화한 후에도 시도해보세요.

    그래도 해결되지 않으신다면

    서버 관리자(웹호스팅 업체)에도 문의를 해보셔야 할 듯합니다.

     

    FTP로 접속이 가능하시다면

    FTP로 접속해서 /wp-content/themes/사용중인테마/functions.php 파일에 코드를 추가해보세요.

    고맙습니다.

  • 감사합니다!

     

    말씀해주신 내용 function 쪽에 추가하였는데, 아래 스크린샷 처럼 작성자의 게시글에서 작성자의 아이디만 익명화됩니다. 

    https://imgur.com/P5RqmO8

     

    혹시 댓글을 다는 사람 또한 익명화 되게 할 수 있을까요?

     

    아울러, 익명화를 하였는데, 쪽지를 보내는 기능이 활성화 되어 있어 쪽지 보내기를 클릭하면 작성자 ID 가 보이게 됩니다. 제가 다른 게시판들은 작성자가 보이도록 하고 있기에 혹시 이 게시판에서만 쪽지보내기 기능을 끌 수 있는 방법이 있을까요?

     

    항상 친절한 답변 주시는 점 진심으로 감사 드립니다.

     

  • 안녕하세요.

    이전 댓글에 안내해드린 코드 중

    아래의 코드를 찾아서

    add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
    function my_kboard_comments_insert($insert_id, $content_uid, $board){
    	if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$content = new KBContent();
    		$content->initWithUID($content_uid);
    		
    		$comment = new KBComment();
    		$comment->initWithUID($insert_id);
    		
    		if(is_user_logged_in()){
    			if($comment->user_uid == $content->member_uid){
    				$comment->user_display = $content->member_display . ' (작성자)';
    			}
    		}
    		else if($content->option->ip == kboard_user_ip()){
    			$comment->user_display = $content->member_display . ' (작성자)';
    		}
    		$comment->update();
    	}
    }

    아래의 코드로 교체해보시겠어요?

    add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 3);
    function my_kboard_comments_insert($insert_id, $content_uid, $board){
    	if($board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$content = new KBContent();
    		$content->initWithUID($content_uid);
    		
    		$comment = new KBComment();
    		$comment->initWithUID($insert_id);
    		
    		if(is_user_logged_in()){
    			if($comment->user_uid == $content->member_uid){
    				$comment->user_display = $content->member_display . ' (작성자)';
    			}
    		}
    		else if($content->option->ip == kboard_user_ip()){
    			$comment->user_display = $content->member_display . ' (작성자)';
    		}
    		else{
    			$comment->user_display = uniqid();
    		}
    		$comment->update();
    	}
    }

     

    테마 쪽 functions.php 파일에 코드를 추가해서

    KBoard 플러그인에 코스모스팜 회원관리 플러그인 쪽지 보내기 기능을 연동하신 건지요?

    어떤 코드를 추가했는지 알려주시면

    특정 게시판에서 제외하는 방법을 안내해드리겠습니다.

    고맙습니다.

  • 빠른 답변 감사 드립니다.

     

    제가 무얼 잘못했는지, 여전히 안되는데, 혹시 한번 살펴봐 주실 수 있을까요? URL 주소는 아래와 같습니다.

    http://clinicaltrialtools.com/%ec%9d%b5%eb%aa%85%ea%b2%8c%ec%8b%9c%ed%8c%90/

     

    아울러, 쪽지보내기 기능은 테마 function.php 에 아래 코드를 추가하였습니다.

     

    add_filter('kboard_user_display', 'kboard_user_message_link', 10, 5);

    function kboard_user_message_link($display, $user_id, $username, $plugin, $builder){

        if(is_user_logged_in()){

            if($user_id && $user_id != get_current_user_id()){

                $display = sprintf('<a href="%s" title="쪽지 보내기">%s</a>', get_cosmosfarm_members_messages_url(array('to_user_id'=>$user_id, 'redirect_to'=>urlencode($_SERVER['REQUEST_URI']))), $display);

            }

        }

        return $display;

    }

     

    감사합니다.

  • 완벽하게 동작합니다!! 진심으로 감사 드립니다! :)

  • 질문이 있어요 작성자 아이디를 익명으로 암호화 하게 하는것까지는 했는데 작성자 이름이 너무 길어서요 한 6자리나 8자리로 표기되게 할수는 없나요?

  • 안녕하세요.

    PHP uniqid 함수는 기본적으로 13자리로 표시됩니다.

    앞에서부터 8자리는 초단위, 뒤의 5자리는 마이크로초단위를 16진수로 바꾼 값으로 표시됩니다.

     

    문자열을 잘라서 표시하시려면 substr 함수를 사용하시면 될 듯합니다.

    초단위는 마이크로초단위보다 비교적 시간이 길기 때문에

    짧은 시간 동안 댓글이 달리면 앞부분이 고정되는 것처럼 보일 수 있습니다.

     

    뒷부분 6자리로 표시되게 하시려면

    uniqid() 부분을 substr(uniqid(), -6)로 모두 교체해보시겠어요?

    8자리로 표시하시려면 -6 부분을 -8로 적용해보세요.

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요