게시판 표시수에서 비밀글 제외가 가능할까요?

1. 정확한 제품 또는 플러그인 이름

kboard 게시판 default 스킨을 커스터마이징해서 이용중입니다.

 

2. 상세 내용

글을 자주 가리고 노출시켜야 해서 비밀글 기능을 이용해 노출 여부 기능을 만들었습니다.

list.php 에서 관리자일때만 비밀글이 리스트에 노출되게 처리한건데 (아래 관련 코드 넣었습니다) 이렇게 하니 노출이 되든 않든 한 페이지의 게시글 표시수에는 카운트가 되버려서 비밀글이 많을 때는 페이지에 게시글이 얼마 없이 처리가 되버리네요.

위 코드조건에서 리스트 카운트를 안하고 넘기는 게 가능할까요?

 

3. 확인 가능한 상세 페이지 주소

 

 

4. 수정한 코드 내역 (있다면)

<?php while($content = $list->hasNext()):?>

   <!--관리자만 비밀글노출-->

   <?php if($content->secret):?>

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

         <tr class="<?php if($content->uid == kboard_uid()):?>kboard-list-selected<?php endif?>">

~~~

         </tr>

      <?php endif?>

   <?php else:?>

   <!--관리자만 비밀글노출 끝-->

<tr class="<?php if($content->uid == kboard_uid()):?>kboard-list-selected<?php endif?>">

 

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

    ftp로 접속해서 kboard->class->KBoard.class.php 파일에서

    아래 코드를 찾으신 다음

    /**
     * 게시판 리스트에 표시되는 게시글 숫자를 반환한다.
     * @return int
     */
    public function getListTotal(){
    	global $wpdb;
    	if(!$this->id){
    		return 0;
    	}
    	if(!$this->meta->list_total || $this->meta->list_total<=0){
    		$this->meta->list_total = $this->getTotal();
    		
    		$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='$this->id' AND `status`='trash'");
    		$wpdb->flush();
    		
    		foreach($results as $row){
    			$content = new KBContent();
    			$content->initWithRow($row);
    			$content->board = $this;
    			$content->moveReplyToTrash($content->uid);
    		}
    	}
    	
    	return intval($this->meta->list_total);
    }
    

    이렇게 수정하시고

    /**
     * 게시판 리스트에 표시되는 게시글 숫자를 반환한다.
     * @return int
     */
    public function getListTotal(){
    	global $wpdb;
    	if(!$this->id){
    		return 0;
    	}
    	if(!$this->meta->list_total || $this->meta->list_total<=0){
    		$this->meta->list_total = $this->getTotal();
    		
    		$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='$this->id' AND `status`='trash'");
    		$wpdb->flush();
    		
    		foreach($results as $row){
    			$content = new KBContent();
    			$content->initWithRow($row);
    			$content->board = $this;
    			$content->moveReplyToTrash($content->uid);
    		}
    	}
    	return intval(apply_filters('kboard_get_list_total', $this->meta->list_total, $this));
    
    }
    

     

    테마 function 파일에

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

    add_filter('kboard_get_list_total', 'kboard_get_list_total20220715', 10, 2);
    function kboard_get_list_total20220715($list_total, $board){
    	if(!is_admin()){
    		global $wpdb;
    		
    		$list_total = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='$board->id' AND `status`!='trash' AND `secret`!='true'");
    	}
    	return $list_total;
    }

    그리고 이 코드 적용하면 매번 쿼리가 실행되니 페이지 로딩이 조금 느려질 수 있습니다.

    고맙습니다.

  • 감사합니다 적용해보도록 하겠습니다!

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기