전체검색 입력필드 추가

안녕하세요 :) kboard 검색부분에서 전체 검색 --> 입력 필드도 검색 가능한지에 대한 질문을 했던 사용자입니다.

다음과 같은 답변 주셔서 너무 감사합니다. 

------------------------------------------------------------------------

1. 전체 검색은 KBoard 게시판 쪽에 표시되는 검색 기능을 말씀하시는 건지요?

현재는 전체 검색 시 입력 필드 쪽은 반영되어 있지 않습니다.

직접 프로그래밍이 가능하시다면 KBoard 플러그인 내장 필터인

kboard_list_select, kboard_list_from, kboard_list_where 필터 등으로 DB 쿼리문을 수정해주셔야 할 듯합니다.

추후 연구 개발하여 KBoard 전체 검색 기능을 개선하도록 하겠습니다.

------------------------------------------------------------------------

답변이 조금 어려워서 다시 질문 드립니다.

답변에서 말씀하신 내장필터로 DB쿼리문을 수정해야 한다고 하셨는데 조금 더 자세하게 알수 있을까요?

전체 검색 부분에 title과 content외에 제가 직접 만든 입력필터를 추가하여 전체검색에서 입력필터가 검색이 될 수 있게 즉, 간단한 방법은 없을까요?

입력필드 이름은 tag로 설정해놓았습니다. 하나의 입력필드만 전체 검색에서 추가하면 됩니다.

조금 자세하게 설명해주셨으면 합니다.

혹시 많이 어렵고 복잡하면 말씀해주세요 ^^

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

    새로운 질문이 아닌 이어지는 질문이라면 이전 질문 페이지의 댓글로 남겨주세요.

    KBoard 전체 검색 시 추가한 입력 필드도 검색되는 예제 코드를

    kboard_list_from 필터와 kboard_list_where 필터를 활용하여 만들어봤습니다.

     

    워드프레스 관리자 -> 외모(테마 디자인) -> 테마 편집기 페이지에서 functions.php 파일 하단에

    아래의 코드를 추가해보시겠어요?

    add_filter('kboard_list_from', 'my_kboard_list_from', 10, 3);
    function my_kboard_list_from($from, $board_id, $content_list){
    	global $wpdb;
    	if(kboard_keyword() && !kboard_target() && $board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$from .= " LEFT JOIN `{$wpdb->prefix}kboard_board_option` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`{$wpdb->prefix}kboard_board_option`.`content_uid`";
    	}
    	return $from;
    }
    
    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	global $wpdb;
    	
    	$keyword = kboard_keyword();
    	if($keyword && !kboard_target() && $board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$option_key = 'tag'; // 실제 입력 필드 메타 키로 적용해주세요.
    		$where = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%' OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='{$option_key}' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    	}
    	return $where;
    }

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

    $option_key = 'tag' 부분은 실제 입력 필드의 메타키로 적용해보시겠어요?

     

    위의 코드는 예제 코드이기 때문에 오류가 있을 수도 있습니다.

    충분히 테스트해보시겠어요?

    고맙습니다.

  • 안녕하세요 문의 글 작성자 입니다.

    방금 코드를 입력하여 테스트를 해보았는데

    전체 검색에서 입력 필드에 작성한 내용을 넣어도 검색이 안되네요..

    전체 검색 말고 태그라고 카테고리를 선택 후 검색을하면 입력필드(태그)로 검색이 잘 되는데.. 무엇이 문제일까요..?

    어떠한 반응도 없이 검색이 안되어 테스트하기가 어렵습니다.

    도와주세요.

  • 사용한 스킨은 비너스 웹진 스킨입니다.

  • 안내해드린 코드에서 게시판 id와 $option_key 부분에는 올바르게 입력하셨는지요?

    저희 쪽에서 KBoard 비너스 웹진 스킨이 설치된 게시판에서 테스트해보니

    정상적으로 동작하는 것을 확인했습니다.

     

    실제 테마 쪽 functions.php 파일에 추가하신 코드와

    비회원으로도 확인 가능한 페이지 주소 알려주시겠어요?

    쓰기권한을 설정하셨다면 제한없음으로 설정하시고 알려주시겠어요?

     

    추가로 비너스 웹진 스킨에 태그 입력 필드는

    FTP로 접속해서 /wp-content/plugins/kboard/skin/사용중인스킨/editor.php 파일에

    아래의 코드를 추가했습니다.

    <div class="kboard-attr-row">
    	<label class="attr-name" for="kboard_option_tag">태그</label>
    	<div class="attr-value"><input type="text" id="kboard_option_tag" name="kboard_option_tag" value="<?php echo $content->option->tag?>" placeholder="태그..."></div>
    </div>

    고맙습니다.

  • 답변 감사드립니다.

    말씀해주신 것처럼 적용을 해보았지만 전체검색에서 작성한 사용자필드 내용으로 검색을 하면 아직 안됩니다..

    사용자 필드도 개발자님께서 보내주신 것처럼 그대로 작성하였습니다. 이름역시 같고요.

    저희가 만드는 홈페이지는 플랫썸테마를 사용하고있습니다. 플랫썸 중에서도 플랫썸 차일드라는 테마를 사용하고있습니다.

    알려주신 functions.php는 플랫섬차일드에서 있는 functions.php입니다.

    코드 역시 똑같이 적용하였습니다. 비너스웹진이 적용되어있는 kboard id역시 "1"로 개발자님이 테스트하신 것과 동일합니다.

    혹시 제가 잘못한 부분이 있을까요?

    적용되어있는 홈페이지 url 첨부해드립니다. 

    http://www.martcoin.net/movie/

    접속하시면 제일 하단에 검색 필드가 있습니다. 사용자 필드(태그)에 입력한 사항은 pjh로 검색 카테고리를 태그로 설정하고 pjh를 검색하면 "테스트 영상"이라는 제목의 게시글이 나오는데

    검색 카테고리를 전체로 하고 pjh를 검색하면 아무것도 출력되지 않습니다.

    확인 한 번 부탁드립니다.

    항상 성실한 답변에 감사드립니다 ^^

  • 올려주신 페이지로 확인해보니 태그 입력 필드에

    pjh, jhp, jph 이런 식으로 입력해주신 듯합니다.

     

    이전에 안내해드린 코드를 적용하면 태그 입력 필드에 pjh만 입력했을 때 게시글 목록에 표시됩니다.

    기존의 코드 중에서 아래의 코드를 찾아서

    $where = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%' OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='{$option_key}' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";

    아래의 코드로 교체해서 확인해보시겠어요?

    $where = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%' OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='{$option_key}' AND `{$wpdb->prefix}kboard_board_option`.`option_value` LIKE '%{$keyword}%')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";

    고맙습니다.

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기