add_filter('kboard_list_where', 'today_best_kboard_list_where', 10, 3);
function today_best_kboard_list_where($where, $board_id, $content_list){
if($board_id == '1'){
$where = "`board_id` IN ('2', '3') AND `parent_uid`='0' AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
}
return $where;
}
위와 같은 코드를 활용해서 게시판두개를 합치는데는 성공했는데
해당 게시판에서 검색을 하려고하는데,
content_list 에 있는 데이터를 저 쿼리문에 어떻게 녹여서 조건을 만들어야 할까요.. ㅠ
날짜 / 옵션으로 추가한 값 을 검색조건으로 주고싶습니다 ...ㅠㅠ
안녕하세요~^^
kboard_list_where 필터를 활용해서 게시글 목록을 불러오는
DB 쿼리 WHERE 절을 편집하셨다면
추가한 입력 필드로 필터링하게 하시려면 kboard_list_from 필터에 LEFT JOIN도 적용해주셔야 합니다.
아래 관련 링크를 참고하셔서 코드를 수정해보시겠어요?
https://www.cosmosfarm.com/threads/document/27474
고맙습니다.
add_filter('kboard_list_where', 'today_best_kboard_list_where', 10, 3);
function today_best_kboard_list_where($where, $board_id, $content_list){
if($board_id == '1'){
$where = "`board_id` IN ('2', '3') AND `parent_uid`='0' AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
}
return $where;
}
옵션을 검색하기 위해서 조인을 해야하는 것은 이해했습니다.
그런데
날짜 검색도 다른 테이블들을 조인한 후에 검색조건을 넣어야 하는건가요?
예시로 어떻게 글작성 기간검색을 조건으로 넣을수 있는지 알려주시면 감사하겠습니다.
안녕하세요.
KBoard 플러그인에서 게시글 작성일은 데이터베이스(DB)
kboard_board_content 테이블 date 컬럼에 저장됩니다.
kboard_list_where 필터에 작성일을 기준으로 표시하시려면
date 컬럼을 비교하는 코드를 추가해보시겠어요?
아래 관련 링크에서 날짜 비교 코드를 확인해보시겠어요?
https://www.cosmosfarm.com/threads/document/26152
https://www.cosmosfarm.com/threads/document/23913
워드프레스 일간, 주간, 월간 베스트 게시판 만들기도 참고해보세요.
고맙습니다.
한가지 더 질문이 있습니다.
URL에 get방식으로 임의의 파라미터를 넘겨 검색조건을 만들고 싶은데
/stlive/st_live/?tag=all&end_date=2019-11-07
요런식으로. tag = all 이라는 값을
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
$today = date('Ymd000000', current_time('timestamp'));
$cus_start_date = $content_list->start_date;
$cus_end_date = $content_list->end_date;
if ($cus_start_date == null && $cus_end_date == null) {
$cus_start_date = $today;
}
if($board_id == '13'){ // 타임라인 게시판 (공식일정 + 프로젝트 소개)
$where = "(`board_id`='7' OR `board_id`='2') AND `notice`='' AND `parent_uid`='0' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
} else if ($board_id == '12'){ // 캘린더 게시판 (공식일정 + 프로젝트 소개)
$where = "(`board_id`='7' OR `board_id`='2') AND `notice`='' AND `parent_uid`='0' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
// 해당 기간에 작성된 게시글만 불러온다.
if($cus_start_date != null && $cus_end_date != null){
$where .= "AND (`date` BETWEEN '{$cus_start_date}' AND '{$cus_end_date}')";
} else if($cus_start_date != null && $cus_end_date == null){
$where .= "AND `date`>='{$cus_start_date}'";
} else if($cus_start_date == null && $cus_end_date != null){
$where .= "AND `date`<='{$cus_end_date}'";
}
}
return $where;
}
위의 코드에
$content_list->start_date; 이런방식으로
사용하고 싶습니다.
그럴때 $content_list에 담아야 할텐데
어떻게 담아야 할까요?
안녕하세요~^^
PHP에서 주소에 있는 값을 가져오는 방법은
$_GET 변수를 활용하시면 가능합니다.
아래의 코드를 활용하시면 주소에 있는 tag 값과 end_date 값을 가져오실 수 있습니다.
$tag = isset($_GET['tag']) ? sanitize_text_field($_GET['tag']) : '';
$end_date = isset($_GET['end_date']) ? sanitize_text_field($_GET['end_date']) : '';
확인해보시겠어요?
고맙습니다.