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 에 있는 데이터를 저 쿼리문에 어떻게 녹여서 조건을 만들어야 할까요.. ㅠ
날짜 / 옵션으로 추가한 값 을 검색조건으로 주고싶습니다 ...ㅠㅠ
안녕하세요~^^
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']) : '';
확인해보시겠어요?
고맙습니다.
한가지 더 질문이 있습니다.
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에 담아야 할텐데
어떻게 담아야 할까요?
안녕하세요.
KBoard 플러그인에서 게시글 작성일은 데이터베이스(DB)
kboard_board_content 테이블 date 컬럼에 저장됩니다.
kboard_list_where 필터에 작성일을 기준으로 표시하시려면
date 컬럼을 비교하는 코드를 추가해보시겠어요?
아래 관련 링크에서 날짜 비교 코드를 확인해보시겠어요?
https://www.cosmosfarm.com/threads/document/26152
https://www.cosmosfarm.com/threads/document/23913
워드프레스 일간, 주간, 월간 베스트 게시판 만들기도 참고해보세요.
고맙습니다.
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_list_where 필터를 활용해서 게시글 목록을 불러오는
DB 쿼리 WHERE 절을 편집하셨다면
추가한 입력 필드로 필터링하게 하시려면 kboard_list_from 필터에 LEFT JOIN도 적용해주셔야 합니다.
아래 관련 링크를 참고하셔서 코드를 수정해보시겠어요?
https://www.cosmosfarm.com/threads/document/27474
고맙습니다.