게시글 삭제 및 수정 방지 방법 문의

1. 게시판 댓글이 달리면 삭제 못하게 하는 방법

https://www.cosmosfarm.com/threads/document/20011

위 글을 참조하여 댓글이 달리면 삭제 못하게 하는 것은 성공했습니다. 하지만 관리자로 로그인해도 삭제가 불가능해졌습니다. 

관리자는 삭제 가능하도록 할 수 있는 방법이 있을까요?

추가로 위 링크에서 보는 코드와 약간 달랐습니다.  게시판 최신 버전 5.4.2 / 스킨 아바타 사용 중입니다. 

 

2. 수정 방지 방법

https://www.cosmosfarm.com/threads/document/13380

위 링크를 참고하여 게시글 수정 버튼이 로그인 사용자에게 안나오도록 하려고 했으나, 해당 코드가 검색이 되질 않았습니다. 

게시판 최신 버전 5.4.2 / 스킨 아바타 사용 중입니다. 

 

3. 2번 질문 대신 수정버튼을 누르면 원글은 수정이 불가능해지고 원글 밑에 추가 내용만 작성할 수 있는 방법이 있을까요?

 

답변 주시면 감사하겠습니다.  

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    1. 관리자는 삭제할 수 있게 하시려면

    아래의 코드를 활용해보시겠어요?

    if(!$this->board->isAdmin()){
    	global $wpdb;
    	$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_comments` WHERE `content_uid`='{$this->uid}'");
    	if($count){
    		die("<script>alert('댓글이 있는 게시글은 삭제하실 수 없습니다.');history.go(-1);</script>");
    	}
    }

     

    2. 최신 버전의 KBoard 플러그인을 사용 중이시라면

    FTP로 접속해서 /wp-content/plugins/kboard/skin/사용중인스킨/document.php 파일에

    아래의 코드를 찾아서

    <?php if($content->isEditor() || $board->permission_write=='all'):?>

    아래의 코드로 교체하시면 글수정, 글삭제 버튼을 관리자에게만 표시합니다.

    <?php if($board->isAdmin()):?>

    고맙습니다

  • 자세한 답변으로 설정이 가능해졌습니다. 감사합니다. 추가로 하나 더 문의 드립니다. 

    일반 로그인 사용자에게 자신이 작성한 글에 글수정, 글삭제 버튼이 표시는 되지만, 

    댓글이 달렸을 시 글수정, 글삭제 모두를 못하게 할 수 있는 방법이 있을까요?

    1번 질문에 대한 해결은 되었지만, 글쓴이가 댓글이 달리면 삭제는 못하나 수정을 해서 내용을 다 지울 수 있는 상황이 되어 질문드립니다. 

    답변주시면 고맙겠습니다. 

  • 안녕하세요.

    일반 로그인 사용자에게 자신이 작성한 글에 글수정, 글삭제 버튼이 표시는 되지만, 

    댓글이 달렸을 시 글수정, 글삭제를 못하게 하시려면

    우선 수정하신 코드는 모두 원래 상태로 복구해보시겠어요?

     

    원상 복구하셨다면

    FTP로 접속해서 /wp-content/plugins/kboard/skin/사용중인스킨/document.php 파일에

    아래의 코드를 찾아서

    <?php if($content->isEditor() || $board->permission_write=='all'):?>

    아래의 코드로 교체해보세요.

    <?php if($board->isAdmin() || get_current_user_id() == $content->member_uid):?>

    위의 코드를 적용하시면 관리자와 작성자에게만 글수정, 글삭제 버튼이 표시됩니다.

     

    그 다음, 워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에

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

    add_action('kboard_skin_header', 'my_kboard_skin_header', 10, 1);
    function my_kboard_skin_header($builder){
    	$board = $builder->board;
    	if(!$board->isAdmin() && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$content_uid = kboard_uid();
    		$mod = kboard_mod();
    		if($content_uid){
    			$content = new KBContent();
    			$content->initWithUID($content_uid);
    			if($content->comment){
    				if($mod == 'editor'){
    					die("<script>alert('댓글이 있는 게시글은 수정하실 수 없습니다.');history.go(-1);</script>");
    				}
    				else if($mod == 'remove'){
    					die("<script>alert('댓글이 있는 게시글은 삭제하실 수 없습니다.');history.go(-1);</script>");
    				}
    			}
    		}
    	}
    }

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

    고맙습니다.

  • 답변 감사합니다. 위 내용을 여러 게시판에 적용하려면 functions.php 파일에 게시판 id 숫자만 바꿔서 반복적으로 적어줘야 하나요? 그렇게 시도해보니 접속이 되질 않았습니다.  아니면 코드안에서 간단하게 추가 가능할까요? 예를들면 id 1번과 3번 게시판만 적용하려고 합니다. 답변 부탁드립니다. 감사합니다. 

  • 안녕하세요.

    여러 개의 게시판에 적용하시려면

    이전 댓글에 안내해드린 코드 중 $board->id == '1' 부분을

    in_array($board->id, array('1', '3')) 이런 식으로 적용해보시겠어요?

    위의 코드처럼 수정하시면 1번 게시판과 3번 게시판에만 적용됩니다.

    고맙습니다.

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