한개의 게시판인데 카테고리별로 다른 조건으로 최신글을 보여주고 싶습니다.
게시판에 카테고리를 10개 생성했는데요
1. 그 중 1개의 카테고리 -> 공지글 업데이트 순서로 상단에 3개 고정 + 일반글 등록순으로 3개
2. 나머지 9개 카테고리 -> 공지글 업데이트 순서로 상단에 1개만 고정 + 일반글 등록순으로 3개
보여주려고 합니다.
1번까지는 숏코드와 필터를 적용해서 작업이 되었는데
2번을 하려고하니 latest 스킨에 보드 아이디로 분기를 줄 수도 없고 방법을 못 찾겠네요.
제가 궁금한 것은 쿼리 만드는 법이 아니라
필터나 스킨에서 현재 선택된 카테고리를 알 수 있는 방법이 있는지 입니다.
한 게시판의 최신글을 같은 페이지에서 같은 스킨으로 보여주는 거라서
분기를 줄 수 있는 조건은 카테고리값밖에 없는데,
필터를 쓸 때 해당 숏코드에서 어떤 카테고리를 선택했는지를 알 수 있는 방법이 있는지가 궁금하네요.
각 필터 사용 예제 코드는 아래와 같습니다.
add_filter('kboard_notice_list_select', 'kboard_notice_list_select_20211027', 10, 3);
function kboard_notice_list_select_20211027($select, $board_id, $list){
if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
// 이곳에 코드를 추가해보세요.
}
return $select;
}
add_filter('kboard_notice_list_from', 'kboard_notice_list_from_20211027', 10, 3);
function kboard_notice_list_from_20211027($from, $board_id, $list){
if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
// 이곳에 코드를 추가해보세요.
}
return $from;
}
add_filter('kboard_notice_list_where', 'kboard_notice_list_where_20211027', 10, 3);
function kboard_notice_list_where_20211027($where, $board_id, $list){
if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
// 이곳에 코드를 추가해보세요.
}
return $where;
}
add_filter('kboard_notice_list_orderby', 'kboard_notice_list_orderby_20211027', 10, 3);
function kboard_notice_list_orderby_20211027($orderby, $board_id, $list){
if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
// 이곳에 코드를 추가해보세요.
}
return $orderby;
}
테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.
고맙습니다.
안녕하세요~^^
KBoard 카테고리1이나 카테고리2를 사용 중이시라면
kboard_category1() 함수를 활용하시면 선택된 카테고리1 값을 확인해보실 수 있습니다.
kboard_category2() 함수를 활용하시면 선택된 카테고리2 값을 확인해보실 수 있습니다.
해당 함수는
FTP로 접속해서 /wp-content/plugins/kboard/helper/Functions.helper.php 파일에서 확인해보실 수 있습니다.
올려주신 링크에는 KBoard 주요 액션과 필터에 대한 설명이 포함되어 있습니다.
모든 액션과 필터가 안내되어 있진 않지만
주로 사용하는 코드에 대해 설명이 되어 있습니다.
그리고 kboard_notice_list_select, kboard_notice_list_from, kboard_notice_list_where 필터도 추가하시려면
FTP로 접속해서 /wp-content/plugins/kboard/class/KBContentList.class.php 파일에
아래의 코드를 찾아서
$orderby = apply_filters('kboard_notice_list_orderby', "`{$this->sort}` {$this->order}", $this->board_id, $this);
$this->resource_notice = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE " . implode(' AND ', $where) . " ORDER BY {$orderby}");
아래의 코드로 교체해보세요.
$select = apply_filters('kboard_notice_list_select', '*', $this->board_id, $this);
$from = apply_filters('kboard_notice_list_from', "`{$wpdb->prefix}kboard_board_content`", $this->board_id, $this);
$where = apply_filters('kboard_notice_list_where', implode(' AND ', $where), $this->board_id, $this);
$orderby = apply_filters('kboard_notice_list_orderby', "`{$this->sort}` {$this->order}", $this->board_id, $this);
$this->resource_notice = $wpdb->get_results("SELECT {$select} FROM {$from} WHERE {$where} ORDER BY {$orderby}");
해당 수정사항은 아래 깃허브 코드 변경사항 쪽에서도 확인해보실 수 있습니다.
수정사항은 다음 업데이트에 반영하도록 하겠습니다.
고맙습니다.
찾아보니 필터에서 쓰는 $content_list 변수에 latest 라는배열에 숏코드에서 지정한 값들이 들어가 있군요.
한가지 문제는 해결했는데요
공지사항 루프를 컨트롤 할 수 있는 필터는 따로 없을까요?
검색해보니 kboard_notice_list_orderby 라는 필터가 있던데 공식 목록에는 없네요.
혹시 kboard_notice_list_where 이런 필터는 없나요?
kboard_list_where 이 필터가 최신글의 공지사항 목록에는 작용이 되지 않네요.