게시판 리스트 검색 - 체크박스를 선택한 다음 검색할 수 있도록 커스터마이징이 필요합니다.

안녕하세요. 

제가 카테고리 기능이나 추가 입력 필드를 이용해서 정보를 입력하는 것까지는 했습니다. 

리스트 화면에서 검색을 할 때 현재는 키워드를 입력하는 방식인데, 이것을 아래 이미지대로 체크박스 형태로 선택해서 검색할 수 있도록 수정이 가능할까요?

http://bsdc.co.kr/befor&after/befor&after.php

 

레퍼런스가 있으면 부탁드리고, 

없으시다면 제가 프로그래밍은 조금 할수 있기때문에, 

이용할 수 있는 훅이나 쿼리를 수정해야 된다면 수정해야할 파일 위치에 대해서 가이드를 주시면 구현이 가능할 꺼 같습니다. 

 

감사합니다.

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요~^^

    KBoard 플러그인에서 입력 필드로 게시글을 검색하고 싶으신 건지요?

    KBoard(케이보드) 입력 필드 검색 방법을 참고해보시겠어요?

    고맙습니다.

  • 네 빠른 답변감사합니다.

    kboard_search_option에서 compare 값을 아래처럼 사용할 수 있다고 하는데, in 을 넣으니까 결과값이 나오지가 않네요.

    '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN'

    in 사용예시를 말씀주실수 있을까요?

    LIKE 넣을 때는 나오는데, 아래처럼 넣으면 안나오네요. 

     <?php $service = isset($kboard_search_option['service']['value']) ? $kboard_search_option['service']['value'] : '';?>

                <input type="hidden" name="kboard_search_option[service][key]" value="service">

                <input type="hidden" name="kboard_search_option[service][compare]" value="IN">

                <select name="kboard_search_option[service][value]">

                <option value="">문의 유형 선택</option>

                <option value="앞니">앞니</option>

                <option value="윗니">윗니</option>

     

                </select>

     

    그리고 드랍다운일때는 단일 값으로 검색이 되는데, 체크박스 일때 다중 선택이 되면 IN 으로 하면 그에 맞게도 검색이 되는 건가요?

    감사합니다.

     

  • 안녕하세요.

    KBoard 입력 필드 검색 시 compare 값을 IN으로 설정했을 때

    입력 필드의 값이 한글로 되어 있을 경우 정상적으로 동작하지 않는 문제를 확인하였습니다.

     

    FTP로 접속해서 /wp-content/plugins/kboard/class/KBContentList.class.php 파일에

    아래의 코드를 찾아서

    if(is_array($option['value'])){
    	$option['value'] = implode(',', $option['value']);
    }
    
    $option_key = isset($option['key']) ? esc_sql(sanitize_key($option['key'])) : '';
    $option_value = isset($option['value']) ? esc_sql(sanitize_text_field($option['value'])) : '';
    $option_compare = isset($option['compare']) ? esc_sql($option['compare']) : '';
    $option_wildcard = isset($option['wildcard']) ? esc_sql($option['wildcard']) : '';

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

    if(isset($option['value']) && is_array($option['value'])){
    	$option_value = array();
    	foreach($option['value'] as $value){
    		$option_value[] = esc_sql(sanitize_text_field($value));
    	}
    	
    	$option_value = "'".implode("','", $option_value)."'";
    }
    else{
    	$option_value = isset($option['value']) ? esc_sql(sanitize_text_field($option['value'])) : '';
    }
    
    $option_key = isset($option['key']) ? esc_sql(sanitize_key($option['key'])) : '';
    $option_compare = isset($option['compare']) ? esc_sql($option['compare']) : '';
    $option_wildcard = isset($option['wildcard']) ? esc_sql($option['wildcard']) : '';

     

    /wp-content/plugins/kboard/class/KBOrderHistory.class.php 파일과

    /wp-content/plugins/kboard/class/KBOrderSales.class.php 파일에

    아래의 코드를 찾아서

    if(is_array($condition['value'])){
    	$condition['value'] = implode(',', $condition['value']);
    }
    
    $condition_key = isset($condition['key']) ? esc_sql(sanitize_key($condition['key'])) : '';
    $condition_value = isset($condition['value']) ? esc_sql(sanitize_text_field($condition['value'])) : '';
    $condition_compare = isset($condition['compare']) ? esc_sql($condition['compare']) : '';
    $condition_wildcard= isset($condition['wildcard']) ? esc_sql($condition['wildcard']) : '';

    아래의 코드로 모두 교체해보세요.

    if(isset($condition['value']) && is_array($condition['value'])){
    	$condition_value = array();
    	foreach($condition['value'] as $value){
    		$condition_value[] = esc_sql(sanitize_text_field($value));
    	}
    	
    	$condition_value = "'".implode("','", $condition_value)."'";
    }
    else{
    	$condition_value = isset($condition['value']) ? esc_sql(sanitize_text_field($condition['value'])) : '';
    }
    
    $condition_key = isset($condition['key']) ? esc_sql(sanitize_key($condition['key'])) : '';
    $condition_compare = isset($condition['compare']) ? esc_sql($condition['compare']) : '';
    $condition_wildcard= isset($condition['wildcard']) ? esc_sql($condition['wildcard']) : '';

    위의 코드는 아래 페이지에서도 확인 가능합니다.

    https://github.com/cosmosfarm/KBoard-wordpress-plugin/commit/c41871d84fd0ea5fa4dc246eb22226399478f4ba

     

    추후 위의 코드를 업데이트에 반영하도록 하겠습니다.

     

    체크박스의 경우에도 IN으로 검색할 수 있습니다.

    체크박스는 옵션 값이 여러 개 적용될 수 있기 때문에

    아래처럼 배열로 적용해보세요.

    <label>
    	<input type="hidden" name="kboard_search_option[checkbox1][key]" value="checkbox1">
    	<input type="checkbox" name="kboard_search_option[checkbox1][value][]" value="일"<?php if(isset($kboard_search_option['checkbox1']['value']) && in_array('일', $kboard_search_option['checkbox1']['value'])):?> checked<?php endif?>>
    	일
    	<input type="checkbox" name="kboard_search_option[checkbox1][value][]" value="이"<?php if(isset($kboard_search_option['checkbox1']['value']) && in_array('이', $kboard_search_option['checkbox1']['value'])):?> checked<?php endif?>>
    	이
    	<input type="hidden" name="kboard_search_option[checkbox1][compare]" value="IN">
    </label>

    고맙습니다.

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