add_action('kboard_comments_field', 'my_kboard_comments_field', 10, 4); function my_kboard_comments_field($field_html, $board, $content_uid, $commentBuilder){ if($board->id == '1'){ // 실제 게시판 id로 적용해주세요. ?> <input type="checkbox" id="comment_option_secret" name="comment_option_secret" value="true"> <label for="comment_option_secret">비밀댓글</label> <?php } } add_filter('kboard_comments_content', 'my_kboard_comments_content', 10, 3); function my_kboard_comments_content($content, $comment_uid, $content_uid){ $comment = new KBComment(); $comment->initWithUID($comment_uid); $board = $comment->getBoard(); if(!$board->isAdmin() && $comment->option->secret && $board->id == '1'){ // 실제 게시판 id로 적용해주세요. $user_id = get_current_user_id(); if(!$user_id || $user_id != $comment->user_uid){ $content = '관리자만 볼 수 있습니다.'; } } return $content; }
워드프레스 테마에서 이 코드를 수정하려고 하는데
Your PHP code changes were rolled back due to an error on line 109 of file wp-content/themes/cryptcio-child/functions.php. Please fix and try saving again.
Cannot redeclare my_kboard_comments_field() (previously declared in wp-content/themes/cryptcio-child/functions.php:76)
라는 오류가 뜨네요.. function my_kboard_comments_field($field_html, $board, $content_uid, $commentBuilder) 이부분에서 오류가 납니다.
현재 사용중인 게시판 형식은 first-contents-mall 입니다.
게시글 작성자와 관리자만 댓글을 볼 수 있는 건
이전 댓글에 안내해드린 코드를 참고해보시겠어요?
비밀댓글 조건을 추가하시려면 if문에 $comment->option->secret 조건도 추가해보세요.
고맙습니다.
말씀 감사합니다. 지금 문제가 되는건..
1번회원이 비밀 댓글로 댓글을 달았을 경우 게시판운영자도 1번회원 댓글의 댓글로 비밀글을 작성합니다.
이런 상황일 때 현재 1번회원은 자신의 댓글은 보이지만, 자신의 대댓글로 단 게시판운영자의 비밀댓글을 볼 수 없습니다.
1번회원이 자신의 댓글의 대댓글로 달린 운영자의 비밀글을 볼 수 있어야 합니다..
KBoard 플러그인에서 게시글을 비밀글로 작성하면
게시글 작성자와 관리자만 내용을 볼 수 있습니다.
그렇기 때문에 별다른 처리를 하지 않더라도
다른 사용자는 내용을 볼 수 없기 때문에 댓글 또한 볼 수 없습니다.
비밀글과 비밀댓글 기능 모두 사용하는 이유가 있으신지요?
다른 사용자도 댓글을 볼 수 있는 상황이라면
아래의 코드를 활용해서 게시글 작성자와 관리자만 댓글을 보게 하실 수 있습니다.
add_filter('kboard_comments_content', 'kboard_comments_content_20200811', 10, 3);
function kboard_comments_content_20200811($comments_content, $comment_uid, $content_uid){
$comment = new KBComment();
$comment->initWithUID($comment_uid);
$board = $comment->getBoard();
$content = new KBContent();
$content->initWithUID($content_uid);
if(!$content->isEditor() && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$comments_content = '권한이 없습니다.';
}
return $comments_content;
}
위의 코드에서 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.
KBContent 클래스의 isEditor 메소드를 활용하시면 게시글 작성자인지 체크하실 수 있습니다.
고맙습니다.
1번회원은 게시글 작성자 입니다.
1번회원이 비밀게시글을 작성하고, 관리자가 비밀댓글을 달았을 시 1번 회원은 관리자의 비밀댓글을 볼 수 있어야 합니다.
안녕하세요.
말씀하신 1번 회원은 게시글 작성자를 말씀하시는 건지요?
아니면 게시글 작성자도 될 수 있고 다른 사용자도 될 수 있는지요?
상황에 따라 코드가 달라지기 때문에
좀 더 구체적으로 설명해주시겠어요?
고맙습니다.
네 감사합니다. 적용은 되었습니다.
근데.. 예를들어 1번의 회원이 비밀 댓글이 단 댓글에 관리자가 비밀댓글의 댓글을 비밀로 달았을 때 1번유저한테는 보여야 합니다..
방법이 없을까요?
안녕하세요~^^
프로그램 코드를 올려야 할 경우 에디터의 코드 스니펫 삽입 기능을 사용해주세요.
그렇지 않으면 이상한 코드로 바뀌거나
질의응답 시 의사소통에 문제가 있을 수도 있습니다.
Cannot redeclare 관련 에러 메시지는 PHP 함수명 중복 문제로 보입니다.
기존에 추가하신 코드가 있으신지요?
my_kboard_comments_field 부분을 my_kboard_comments_field1 이런 식으로 모두 교체해서
PHP 함수명이 중복되지 않게 적용해보시겠어요?
여러 개의 게시판에 적용하시려면
올려주신 코드 중 $board->id == '1' 부분을
in_array($board->id, array('1', '2', '3')) 이런 식으로 모두 교체해보시겠어요?
위의 코드에서 각 숫자는 게시판 id로 적용해보세요.
고맙습니다.
아. 그리고 게시판이 여러개여서 실제 게시판 번호를 여러개 작성해야 하는데 그때는 어떻게 해야하나요?