목록에서 댓글 정보를 가져오는 방법은 없나요?

getCommentsCount로 목록에서 댓글 개수를 가져오는 건 확인했습니다. 그럼 목록에서 댓글 정보를 가져오는 방법은 없나요? 

관리자가 댓글을 달면 상태가 완료로 바뀌게 만들고 싶은데 방법을 못 찾겠어서 물어봅니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    KBoard 플러그인의 kboard_comments_insert 액션을 활용하시면

    댓글 입력 후 새로운 코드를 추가하고 실행하게 하실 수 있습니다.

    해당 액션에서 관리자인지 체크해서 게시글의 상태 정보를 업데이트하면 될 듯합니다.

    추가한 액션의 함수에서 $board->isAdmin()으로 관리자인지 체크할 수 있습니다.

     

    KBoard 주요 액션과 필터는

    아래의 링크를 참고해보세요.

    https://www.cosmosfarm.com/products/kboard/hooks

    고맙습니다.

  • 답변 감사합니다. functions.php에 add_action()으로 추가하고 function을 만들어서 관리자인지 체크해서 관리자라면 상태정보를 업데이트하면 되는데 기존 목록에 상담사가 있고 사용자가 글을 작성했을 때는 상담사에 빈값으로 들어갔다가 관리자가 댓글을 달면 상태도 바뀌고 상담사에 그 관리자의 이름이 들어가야되는데 관리자인지 확인하는거 말고도 그 댓글을 쓴 관리자의 정보를 알 수 있는 방법을 알아야합니다.  

  • 안녕하세요.

    상태정보와 상담사는 게시글의 입력 필드를 활용 중이신지요?

    또한 관리자의 이름은 어떤 필드를 활용 중이신지 알려주시겠어요?

     

    워드프레스 wp_get_current_user 함수를 활용하시면

    현재 로그인한 사용자의 정보를 확인하실 수 있습니다.

     

    wp_get_current_user 함수에 대한 자세한 내용은 아래의 링크를 참고해보세요.

    https://developer.wordpress.org/reference/functions/wp_get_current_user/

    고맙습니다.

  • 상세한 설명 감사합니다. 제가 초보라 정확히 설명을 못 드려서 죄송합니다.. 상태 정보와 상담사는 게시글의 입력 필드를 사용하지 않습니다. 상담사는 3명이고 그 3명은 사용자에 구독자로 추가해놓은 상황입니다. 상태 정보는 만약 댓글이 달렸다면 상태 변경만 해주면 되는 거라 kboard_comments_insert 액션일 때 변수에 값을 넣고 값이 있다면 완료로 뜨게 조건문을 준 상황이고 댓글은 댓글 사용 활성화 후 스킨은 기본 default 사용 중입니다. 제가 이해한 대로 말한다면 위에 추가한 kboard_comments_insert 액션 안에 $admin = wp_get_current_user(); 로 받아서 $admin->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); 조건에 필요한 부분 } 넣고 댓글을 쓰면 페이지가 작동하지 않는다고 뜨는데 뒤로가기해서 보면 댓글이 들어가져 있거든요 왜이런거죠?

  • 사용자의 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($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()으로 해도 똑같았습니다.

  • kboard_comments_insert 액션에 추가한 $admin 변수는

    게시글 목록을 표시하는 list.php 파일에서는 사용하실 수 없습니다.

    그렇기 때문에 게시글 입력 필드를 활용해주셔야 할 듯합니다.

     

    1. 워드프레스 관리자 -> KBoard -> 게시판 목록 -> 게시판 선택 -> 입력필드 설정 탭에서

    확장 필드 중 텍스트/숨김 필드에 숨김(hidden) 체크박스를 체크한 후 추가해보세요.

    https://imgur.com/a/QTzo9ms

     

    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?>

     

    추가로 설명을 드리자면,

    댓글을 관리자만 작성하는 경우에는 해당 코드가 문제되지 않지만

    일반 사용자도 댓글을 달 수 있는 상황이라면 문제가 될 수 있습니다.

    댓글이 없을 경우 대기로 표시되고 댓글이 달리면 완료로 표시되기 때문입니다.

    그렇기 때문에 일반 사용자도 댓글을 달 수 있는 상황이라면

    상태정보도 상담사처럼 게시글 입력 필드를 활용해서 관리자가 댓글을 달았을 때

    게시글 입력 필드를 업데이트해주셔야 할 듯합니다.

    고맙습니다.

  • 상세한 설명 정말 감사합니다. 작동 잘 됩니다. 작성 시 비밀글로 되게 해놓아서 작성자 이외에 다른 일반 사용자는 댓글을 달 수 없습니다. 선택된 관리자만 게시판 접근하게 설정해놓아서 비밀번호를 입력해야 들어갈수 있기 때문에 괜찮을거같습니다. 정말 감사합니다^^

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