getCommentsCount로 목록에서 댓글 개수를 가져오는 건 확인했습니다. 그럼 목록에서 댓글 정보를 가져오는 방법은 없나요?
관리자가 댓글을 달면 상태가 완료로 바뀌게 만들고 싶은데 방법을 못 찾겠어서 물어봅니다.
상세한 설명 정말 감사합니다. 작동 잘 됩니다. 작성 시 비밀글로 되게 해놓아서 작성자 이외에 다른 일반 사용자는 댓글을 달 수 없습니다. 선택된 관리자만 게시판 접근하게 설정해놓아서 비밀번호를 입력해야 들어갈수 있기 때문에 괜찮을거같습니다. 정말 감사합니다^^
kboard_comments_insert 액션에 추가한 $admin 변수는
게시글 목록을 표시하는 list.php 파일에서는 사용하실 수 없습니다.
그렇기 때문에 게시글 입력 필드를 활용해주셔야 할 듯합니다.
1. 워드프레스 관리자 -> KBoard -> 게시판 목록 -> 게시판 선택 -> 입력필드 설정 탭에서
확장 필드 중 텍스트/숨김 필드에 숨김(hidden) 체크박스를 체크한 후 추가해보세요.
2. 테마 쪽 functions.php 파일에 추가한 코드를
아래의 코드로 교체해보세요.
add_action('kboard_comments_insert', 'kboard_comments_insert_2020_04_09', 10, 3);
function kboard_comments_insert_2020_04_09($comment_uid, $content_uid, $board){
if($board->isAdmin() && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$content = new KBContent();
$content->initWithUID($content_uid);
$admin = wp_get_current_user();
$content->option->admin = $admin->user_firstname;
$content->updateOptions();
}
}
위의 코드에서 $board->id == '1' 부분은 실제 게시판 id로 적용해주세요.
user_firstname 부분은 실제 사용자 메타 값으로 적용해주세요.
3. 게시글 목록을 표시하는 list.php 파일에 수정하신 코드 중
아래의 코드를 찾아서
<?php echo $admin->user_firstname ;?>
아래의 코드로 교체해보세요.
<?php echo $content->option->admin?>
추가로 설명을 드리자면,
댓글을 관리자만 작성하는 경우에는 해당 코드가 문제되지 않지만
일반 사용자도 댓글을 달 수 있는 상황이라면 문제가 될 수 있습니다.
댓글이 없을 경우 대기로 표시되고 댓글이 달리면 완료로 표시되기 때문입니다.
그렇기 때문에 일반 사용자도 댓글을 달 수 있는 상황이라면
상태정보도 상담사처럼 게시글 입력 필드를 활용해서 관리자가 댓글을 달았을 때
게시글 입력 필드를 업데이트해주셔야 할 듯합니다.
고맙습니다.
대답 해주셔서 감사합니다. 제가 막힌 부분 설명드리겠습니다. functions.php에 넣은 코드입니다.
add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 2);
function my_kboard_comments_insert($comment_uid, $content_uid){
$comment = new KBComment();
$comment->initWithUID($content_uid);
if($comment->isAdmin()){
$admin = wp_get_current_user();
}
}
그리고 사용중인 스킨의 list.php에 있는 코드입니다.
<?php while($content = $list->hasNext()):?>
<tr class="<?php if($content->uid == kboard_uid()):?>kboard-list-selected<?php endif?>">
<td class="kboard-list-state">
<?php if(!$content->getCommentsCount()) { ?>
<span class="label-state">대기</span>
<?php } else { ?>
<span class="label-state">완료</span>
<?php } ?>
</td>
<td class="kboard-list-title">
<a href="<?php echo $url->getDocumentURLWithUID($content->uid)?>">
<div class="kboard-default-cut-strings">
<?php echo $content->title?>
<?php if($content->secret):?><span class="label-danger"><i class="fa fa-lock"></i></span><?php endif?>
<span class="kboard-comments-count"><?php echo $content->getCommentsCount()?></span>
</div>
</a>
<div class="kboard-mobile-contents">
<span class="contents-item kboard-user"><?php echo apply_filters('kboard_user_display', $content->member_display, $content->member_uid, $content->member_display, 'kboard', $boardBuilder)?></span>
<span class="contents-separator kboard-date">|</span>
<span class="contents-item kboard-date"><?php echo $content->getDate()?></span>
<span class="contents-separator kboard-vote">|</span>
<span class="contents-item kboard-vote"><?php echo __('Votes', 'kboard')?> <?php echo $content->vote?></span>
<span class="contents-separator kboard-view">|</span>
<span class="contents-item kboard-view"><?php echo __('Views', 'kboard')?> <?php echo $content->view?></span>
</div>
</td>
<td class="kboard-list-user"><?php echo apply_filters('kboard_user_display', $content->member_display, $content->member_uid, $content->member_display, 'kboard', $boardBuilder)?></td>
<td class="kboard-list-date"><?php echo $content->getDate()?></td>
<td class="kboard-list-counselor"><?php echo $admin->user_firstname ;?></td>
</tr>
<?php $boardBuilder->builderReply($content->uid)?>
<?php endwhile?>
이렇게 하고 디버깅 모드에서 확인해보면 Notice: Undefined variable: admin in /fordev/www/wp-content/plugins/kboard/skin/question_prac/list.php on line 116 Notice: Trying to get property of non-object in /fordev/www/wp-content/plugins/kboard/skin/question_prac/list.php on line 116 admin을 찾을 수 없다고 뜹니다.
Fatal error: Call to undefined method KBComment::isAdmin() in /fordev/www/wp-content/themes/Avada/functions.php on line 1633 이것도 같이 뜹니다. 여기서 문제점이 일단 isAdmin()을 찾을수 없다는거 같은데 따로 선언을 해줘야하는건가요? $board->isAdmin()으로 해도 똑같았습니다.
사용자의 user_firstname 필드에 값이 있다면
올려주신 코드처럼 적용하시면 관리자의 user_firstname 값이 표시됩니다.
시도해보시고 잘 안되시면
에디터의 코드 스니펫 삽입 기능으로 추가하신 코드를 올려주시겠어요?
고맙습니다.
아참 그리고 하나 더 물어볼게 있습니다. functions.php에 add_action('kboard_comments_insert', 'my_kboard_comments_insert', 10, 2); 으로 하고 function my_kboard_comments_insert($comment_uid, $content_uid){ $comment = new KBComment(); $comment->initWithUID($insert_id); 조건에 필요한 부분 } 넣고 댓글을 쓰면 페이지가 작동하지 않는다고 뜨는데 뒤로가기해서 보면 댓글이 들어가져 있거든요 왜이런거죠?
상세한 설명 감사합니다. 제가 초보라 정확히 설명을 못 드려서 죄송합니다.. 상태 정보와 상담사는 게시글의 입력 필드를 사용하지 않습니다. 상담사는 3명이고 그 3명은 사용자에 구독자로 추가해놓은 상황입니다. 상태 정보는 만약 댓글이 달렸다면 상태 변경만 해주면 되는 거라 kboard_comments_insert 액션일 때 변수에 값을 넣고 값이 있다면 완료로 뜨게 조건문을 준 상황이고 댓글은 댓글 사용 활성화 후 스킨은 기본 default 사용 중입니다. 제가 이해한 대로 말한다면 위에 추가한 kboard_comments_insert 액션 안에 $admin = wp_get_current_user(); 로 받아서 $admin->user_firstname을 에코로 찍으면 나온다는 말인가요?
안녕하세요.
상태정보와 상담사는 게시글의 입력 필드를 활용 중이신지요?
또한 관리자의 이름은 어떤 필드를 활용 중이신지 알려주시겠어요?
워드프레스 wp_get_current_user 함수를 활용하시면
현재 로그인한 사용자의 정보를 확인하실 수 있습니다.
wp_get_current_user 함수에 대한 자세한 내용은 아래의 링크를 참고해보세요.
https://developer.wordpress.org/reference/functions/wp_get_current_user/
고맙습니다.
답변 감사합니다. functions.php에 add_action()으로 추가하고 function을 만들어서 관리자인지 체크해서 관리자라면 상태정보를 업데이트하면 되는데 기존 목록에 상담사가 있고 사용자가 글을 작성했을 때는 상담사에 빈값으로 들어갔다가 관리자가 댓글을 달면 상태도 바뀌고 상담사에 그 관리자의 이름이 들어가야되는데 관리자인지 확인하는거 말고도 그 댓글을 쓴 관리자의 정보를 알 수 있는 방법을 알아야합니다.
안녕하세요~^^
KBoard 플러그인의 kboard_comments_insert 액션을 활용하시면
댓글 입력 후 새로운 코드를 추가하고 실행하게 하실 수 있습니다.
해당 액션에서 관리자인지 체크해서 게시글의 상태 정보를 업데이트하면 될 듯합니다.
추가한 액션의 함수에서 $board->isAdmin()으로 관리자인지 체크할 수 있습니다.
KBoard 주요 액션과 필터는
아래의 링크를 참고해보세요.
https://www.cosmosfarm.com/products/kboard/hooks
고맙습니다.