게시판 다중검색 관련 문의

안녕하세요, 게시판 검색기능 관련하여 문의드립니다.

게시글에 여러개 키워드로 검색이 가능할까요?

예를들어, "title1, title2" 로 검색 시,

title1 을 가진 게시글과 title2 를 가진 게시글 둘다 검색되게 하고 싶습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    kboard_list_where 필터를 활용하시면

    게시글 목록을 가져오는 DB쿼리문의 WHERE절을 편집할 수 있습니다.

    KBoard 주요 액션과 필터에 대한 자세한 내용은

    아래의 링크를 참고해보세요.

    https://www.cosmosfarm.com/products/kboard/hooks

     

    별도로 추가한 입력 필드를 검색하는 방법은

    아래의 링크를 참고해보세요.

    KBoard(케이보드) 입력 필드 검색 방법 - 워드프레스 게시판 커스터마이징

    고맙습니다.

  • 혹시 조금 더 상세하게 말씀해주실 수 있을까요??

  • 글로 설명하는 게 어려워 예제 코드를 작성해봤습니다.

    아래의 코드를 활용해보시겠어요?

    add_filter('kboard_list_where', 'kboard_list_where_20200918', 10, 3);
    function kboard_list_where_20200918($where, $board_id, $content_list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$keyword = kboard_keyword();
    		$target = kboard_target();
    		
    		if($keyword){
    			$search = explode(',', $keyword);
    			$title = array();
    			if($target){
    				foreach($search as $item){
    					$item = trim($item);
    					$title[] = "`{$target}` LIKE '%{$item}%'";
    				}
    			}
    			else{
    				foreach($search as $item){
    					$item = trim($item);
    					$title[] = "`title` LIKE '%{$item}%' OR `content` LIKE '%{$item}%'";
    				}
    			}
    			
    			$title = implode(' OR ', $title);
    			$where = "`board_id`='{$board_id}' AND ({$title}) AND `notice`='' AND (`status`='' OR `status`='pending_approval')";
    		}
    	}
    	return $where;
    }

    테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.

     

    추가로 궁금하신 사항은 댓글로 남겨주시길 부탁드립니다.

    고맙습니다.

  • http://iljoongtex.com/?page_id=24

    추가 입력필드를 다중 검색하고 싶습니다.

    알려주신 코드로는 조금 헷갈려서요 ㅠㅠ

    위 링크 사이트 보시면 Keywords 라는 필드를 추가했고, 검색되는 거 까지 설정했습니다.

    근데, 검색이 하나의 검색어 밖에 안되서 이걸 다중 검색하려면 어떻게 해야되나요?

    Keywords1, Keywords2 이렇게 검색했을 때,

    Keywords1 값을 가진 게시글과 Keywords2 값을 가진 게시글 둘다 검색되게 하고 싶습니다

  • 제목, 내용, 작성자가 아닌 입력 필드에 적용하시려면

    아래의 코드를 활용해보시겠어요?

    add_filter('kboard_list_where', 'kboard_list_where_20200922', 10, 3);
    function kboard_list_where_20200922($where, $board_id, $content_list){
    	if(!$content_list->is_latest && $board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$keyword = kboard_keyword();
    		$target = kboard_target();
    		$meta_key = 'address';
    		
    		if($target == 'kboard_option_address' && $keyword){
    			$search = explode(',', $keyword);
    			
    			$values = array();
    			foreach($search as $item){
    				$item = trim($item);
    				$values[] = "(`option_key`='{$meta_key}' AND `option_value` LIKE '%{$item}%')";
    			}
    			$search_where = implode(' OR ', $values);
    			$search_where = "($search_where)";
    		
    			$where = array();
    			$where[] = "`board_id`='{$board_id}'";
    			$where[] = "`notice`=''";
    			$where[] = "(`status`='' OR `status`='pending_approval')";
    			$where[] = $search_where;
    			
    			$where = implode(' AND ', $where);
    		}
    	}
    	return $where;
    }

    위의 코드에서 $board_id == '1' 부분은 실제 게시판 id로 적용해주세요.

    저희는 필드의 메타키를 address로 설정한 후 테스트했습니다.

    address 부분은 실제 입력 필드의 메타키로 적용해보세요.

     

    해당 코드를 활용해서 원하시는 대로 적용하시려면

    PHP 코드에 대해 어느 정도 알고 계셔야 합니다.

    코드를 수정하기 어렵거나 수정해야하는 부분이 많다면

    프로젝트 의뢰에 상세한 내용을 등록해보세요.

    https://www.cosmosfarm.com/project

    고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기