작년 봄에도 질문드렸는데 ㅠㅠ 업데이트 될 것이라고만 하셔서 ㅠㅠ
한번 더 질문드려봅니다!
최신글 모아보기에서 정렬 순서 중 '조회순'을 특정 기간(예: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)) 이렇게 붙이면 되나요?
일단 추천수 적용이 작동되지 않아..
확인과 답변부탁드리겠습니다. ㅠㅠ
어떤 부분에서 안되는건지 저희도 면밀히 테스트를 해봐야 할 듯합니다.
저희 고객지원쪽으로 유료 기술지원을 요청해주시겠어요?
고맙습니다.