최신글보기 조회순에 기간을 제한해두고 싶습니다.

작년 봄에도 질문드렸는데 ㅠㅠ 업데이트 될 것이라고만 하셔서 ㅠㅠ

한번 더 질문드려봅니다!

 

최신글 모아보기에서 정렬 순서 중 '조회순'을 특정 기간(예:1주일)으로 설정하고

조회순이 아닌 조회수와 추천수를 결합하여 최신글로 정렬하고 싶습니다.

 

예를 들어 "조회순+(추천수*10)=점수"이고 1주일 이외의 글을 출력에서 제외한다고하면

 

A 게시글은 조회수:100 추천수:10 / 작성일 2017.12.01

B 게시글은 조회수: 50 추천수: 0 / 작성일 2018.01.01

C 게시글은 조회수 10 추천수: 10 / 작성일 2018.01.03

D 게시글은 조회수: 50 추천수: 50 / 작성일 2018.01.03

이라고 할 때

 

 

A게시글 200점이지만 금일부터 일주일이 지났기에 출력되지 않고

B게시글은 50점[50+(0*10)]

C게시글은 110점[10+(10*10)]

D게시글은 550점[50+(50*10)]

이기 때문에

 

 

A게시글을 제외한

 

D 게시글(550점)

C 게시글(110점)

B 게시글(50점)

순으로 

 

출력되어야 합니다.

 

최신글모아보기 메뉴에서 조회순으로 설정하면 이와 같이 출력되길 바라는데 어려울까요? ㅠㅠ

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

    직접 파일에 코드를 추가해주셔야 합니다.

    1. FTP로 접속해서 /wp-content/plugins/kboard/class/KBContentList.class.php 파일에

    아래의 코드를 찾아서

    var $is_first;

    찾은 코드 밑에 아래의 코드를 추가해보세요.

    var $is_latest = false;

     

    2. /wp-content/plugins/kboard/class/KBoardBuilder.class.php 파일에

    아래의 코드를 찾아서

    public function createLatest($with_notice=true){
    	ob_start();
    	
    	$list = new KBContentList($this->board_id);
    	$list->category1($this->category1);
    	$list->category2($this->category2);
    	$list->setSorting($this->sort);
    	$list->rpp($this->rpp);
    	$list->getList('', '', $with_notice);
    	
    	$vars = array(
    			'board_url' => $this->url,
    			'list' => $list,
    			'url' => new KBUrl(),
    			'skin' => $this->skin,
    			'skin_path' => $this->skin->url($this->skin_name),
    			'skin_dir' => $this->skin->dir($this->skin_name),
    			'board' => $this->board,
    			'boardBuilder' => $this,
    	);
    	
    	echo $this->skin->load($this->skin_name, 'latest.php', $vars);
    	
    	return ob_get_clean();
    }

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

    public function createLatest($with_notice=true){
    	ob_start();
    	
    	$list = new KBContentList($this->board_id);
    	$list->is_latest = true;
    	$list->category1($this->category1);
    	$list->category2($this->category2);
    	$list->setSorting($this->sort);
    	$list->rpp($this->rpp);
    	$list->getList('', '', $with_notice);
    	
    	$vars = array(
    			'board_url' => $this->url,
    			'list' => $list,
    			'url' => new KBUrl(),
    			'skin' => $this->skin,
    			'skin_path' => $this->skin->url($this->skin_name),
    			'skin_dir' => $this->skin->dir($this->skin_name),
    			'board' => $this->board,
    			'boardBuilder' => $this,
    	);
    	
    	echo $this->skin->load($this->skin_name, 'latest.php', $vars);
    	
    	return ob_get_clean();
    }

     

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

    아래의 코드를 추가해보세요.

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		$week = date("YmdHis", strtotime("-1 week +9 hours"));
    		return $where . "AND `date` >= {$week} AND (`view` + (`like` * 10)) > 점수" ;
    	}
    	else{
    		return $where;
    	}
    }

    위 코드에서 점수 부분을 적절한 숫자로 수정 후 적용해보세요.

     

    위에 안내드린 내용은 깃허브(Github)에서 추가된 내용을 확인해보실 수 있습니다.

    https://github.com/cosmosfarm/KBoard-wordpress-plugin/tree/master/plugins/kboard/class

    고맙습니다.

  • 여전히 안됩니다.

  • 추가로 숏코드는 아래처럼 적용해보세요.

    [kboard_latest id="게시판 ID" url="게시판 주소" rpp="5" sort="viewed"]

    위 코드에서 "게시판 ID" 부분에는 실제 게시판 ID,

    "게시판 주소" 부분에는 실제 게시판 주소로 수정하신 후 적용해보세요.

  • 안녕하세요~^^

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

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($content_list->is_latest && $board_id == '1' && $content_list->getSorting() == 'viewed'){
    		$week = date("YmdHis", strtotime("-36 hours"));
    		return $where . "AND (`view` + (`vote` * '10')) > 0 AND `date` >= {$week}";
    	}
    	return $where;
    }
    
    add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
    function my_kboard_list_orderby($order, $board_id, $content_list){
    	if($content_list->is_latest &&  $board_id == '1' && $content_list->getSorting() == 'viewed'){
    		return "(`view` + (`vote` * '10')) DESC";
    	}
    	return $order;
    }

    고맙습니다.

  • 테스트가 쉽지 않아 데이터 베이스에서 vote 값을 늘려보았는데 여전히 되지 않습니다 ㅠㅠ

    혹시나해서 캐시도 지워보고 아파치도 재부팅 시켜보았는데 여전하네요..

    $board_id에는 특정 게시판 번호를 넣어보았으나 이번엔 기간이 적용되지 않습니다. ㅠㅠ

     

    저렇게 코드를 넣어보아도 현재 view+vote 값이 아닌 view 값으로만 정렬이 되고 있는 상황입니다. ㅠㅠ

  • 안녕하세요~^^

    조회수 + 추천수 * 10 순으로 정렬하시려면

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

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($board_id == '1' && $content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		$week = date("YmdHis", strtotime("-36 hours"));
    		return $where . "AND (`view` + (`vote` * '10')) > 0 AND `date` >= {$week}";
    	}
    	return $where;
    }
    
    add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
    function my_kboard_list_orderby($order, $board_id, $content_list){
    	if($board_id == '1' && $content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		return $order . ", `vote` DESC";
    	}
    	return $order;
    }

    위 코드에서 $board_id == '1' 부분에서 '1'은 실제 게시판 id로 수정하신 후에 적용해보세요.

     

    게시글 A : 추천수 10 조회수 100

    게시글 B : 추천수 100 조회수 10

    게시글 C : 추천수 50 조회수 80

    게시글 D : 추천수 40 조회수 80

    A 게시글의 추천수는 좋아요만 10개이거나 좋아요 100개, 싫어요 90개일 수도 있습니다.

    D 게시글의 추천수는 좋아요만 40개이거나 좋아요 100개, 싫어요 60개일 수도 있습니다.

    `vote`(추천)는 위에 설명드렸듯이 좋아요(like) - 싫어요(unlike) 입니다.

    게시글 목록이나 게시글에서 보이는 추천의 수를 `vote` 칼럼으로 표시합니다.

    고맙습니다.

  • 답변 감사드립니다.

    아래처럼 적용해보니 드디어 추천수의 영향을 받는 것 같습니다. :)

     

    그러나 < 조회수 + 추천수 * 10 >이 아닌 단순히 < 조회수 + 추천수 >로만 이루어져있는 거 같기도 하고

    같은 조회수 중에서 추천수가 가장 많은 게시글이 위로 뜨는 것 같기도 하구요 ㅠㅠ

     

    게시글 A : 추천수 10 조회수 100

    게시글 B : 추천수 100 조회수 10

    게시글 C : 추천수 50 조회수 80

    게시글 D : 추천수 40 조회수 80

     

     

    이라고 할때

    A

    C

    D

    B

    순으로 랭크가 되는 것 같네요.

     

    운영 중인 사이트인지라 계속 조회수가 올라가서 테스트가 쉽지 않네요 ㅠ

     

    무엇보다 일단 잘 이해가 되지 않습니다. ㅠㅠ

    위에서 말씀하신 < 만약 좋아요가 10이고 싫어요가 5일 경우 `vote`는 5입니다. > 라는 뜻이 무엇인가요?

     

    예제나 자세한 설명 부탁드려도 될까요? :))

  • 안녕하세요~^^

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

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		$week = date("YmdHis", strtotime("-36 hours"));
    		return $where . "AND (`view` + `vote`) > 0 AND `date` >= {$week}";
    	}
    	return $where;
    }
    
    add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
    function my_kboard_list_orderby($order, $board_id, $content_list){
    	if($content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		return $order . ", `vote` DESC";
    	}
    	return $order;
    }

    위 코드에서 `vote`는 "좋아요 - 싫어요"입니다.

    만약 좋아요가 10이고 싫어요가 5일 경우 `vote`는 5입니다.

    kboard_list_orderby 필터도 적용해봤습니다.

    자세한 내용은 아래의 링크를 참고해보시겠어요?

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

    고맙습니다.

  • add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		$week = date("YmdHis", strtotime("-36 hours"));
    		return $where . "AND `date` >= {$week} AND (`view` + `like` * 10 - `unlike`) > 1" ;
    	}
    	else{
    		return $where;
    	}
    }

     

    위처럼 삽입하면 36시간 전까지의 글은 출력되고 이후의 글은 사라집니다.

    그러나 조회수로만 나열이 됩니다.

     

    말씀해주신대로

    {$week} AND (`view` + (`like`) - (`unlike`)) > 점수" ;

    이라고 나열을 해보았는데도

    공감&비공감의 영향없이 조회수로만 나열됩니다.

    추천을 계속 눌러봐도 결국 조회수대로만 출력되더라구요.

  • 별도의 에러 메시지는 뜨지 않습니다.

  • 안녕하세요.

    kboard_board_content 테이블에서 like 컬럼과 unlike 컬럼은 데이터형이 int 입니다. (숫자입니다.)

    추가적으로 에러 메시지(PHP 혹은 DB 어느쪽이든)가 있다면 도움을 드릴 수 있을 듯합니다.

     

    아니면 LIKE와 UNLIKE를 인식하지 못한다는 말씀이 버튼? 말인지요.

    조금더 설명을 부탁드립니다.

     

    정밀한 테스트가 필요하거나 경우에 따라서는 유료 기술지원을 요청해주셔야 할 듯합니다.

    고맙습니다.

  • 아쉽게도 여전히 LIKE와 UNLIKE를 인식하지 못하네요 ㅠㅠ

    혹시 다른 문제는 없을까요? ㅠㅠ

     

    `View`는 인식하는 것으로 보아 아무래도 like와 unlike를 숫자로 인식하지 못하는 것 같기도 하구요 ㅠ

  • 안녕하세요.

    조회수 + (추천수 * 10)의 값이 점수 부분의 값보다 크다면

    최신글 리스트에서 표시하는 코드를 안내드렸습니다.

    싫어요를 점수에 반영하려면

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

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	if($content_list->getSorting() == 'viewed' && $content_list->is_latest){
    		$week = date("YmdHis", strtotime("-1 week +9 hours"));
    		return $where . "AND `date` >= {$week} AND (`view` + (`like`) - (`unlike`)) > 점수" ;
    	}
    	else{
    		return $where;
    	}
    }

    위 코드에서 점수 부분은 (조회수 + 좋아요 - 싫어요)의 값보다 큰 게시글을 표시할 숫자로 수정해주시면 됩니다.

    (`view` + (`like` * 10) - (`unlike` * 10)) 같은 형식은 문제가 될 수 있으니 위의 코드를 적용해보시겠어요?

    고맙습니다.

  • 답변 감사드립니다. :)) 이제 날짜 제한은 정상적으로 작동이 되네요. :)

    다만 추천수를 포함하여 출력하지 못하는 것 같고

    온전히 조회수대로만 표시되네요. ㅠㅠ

     


    그리고 return $where . "AND `date` >= {$week} AND (`view` + (`like` * 10)) > 점수" ;

    에서 '점수'는 그 '점수' 이상일때만 표시되어라 라는 뜻인가요?

     

    추가적으로 싫어요를 눌렀을때 점수를 차감하고자 한다면

     (`view` + (`like` * 10) - (`unlike` * 10)) 이렇게 붙이면 되나요?

     

    일단 추천수 적용이 작동되지 않아..
    확인과 답변부탁드리겠습니다. ㅠㅠ

  • 어떤 부분에서 안되는건지 저희도 면밀히 테스트를 해봐야 할 듯합니다.

    저희 고객지원쪽으로 유료 기술지원을 요청해주시겠어요?

    고맙습니다.

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기