여러 게시판을 한게시판에서 보이게 할때 검색조건을 어떻게 달아야 하나요?

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

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요