옵션에서 단 1개의 조건이라도 포함되면 모두 검색되게 하고 싶습니다.

1. 정확한 제품 또는 플러그인 이름

default

 

2. 상세 내용

    <div class="kboard-search">

        <div class="kboard-option">

            <form id="kboard-option-form-<?php echo $board->id?>" method="get" action="<?php echo $url->toString()?>">

                <?php echo $url->set('pageid', '1')->set('target', '')->set('keyword', '')->set('mod', 'list')->toInput()?>

                <input type="hidden" name="kboard_search_option[relation]" value="and">

                <?php $option = kboard_search_option();?>

                <!--시간-->

                <div class="time">

                    <span>시간</span>

                    <div class="timeBox">

                        <div class="flex-box">

                            <label>

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

                                <input type="checkbox" name="kboard_search_option[checkboxtime1][value]" value="1" onchange="this.form.submit()"<?php if(isset($option['checkboxtime1']['value']) && $option['checkboxtime1']['value']):?> checked<?php endif?>>

                                <span>

                                    <input type="hidden" name="kboard_search_option[checkboxtime1][compare]" value="=">9시~

                                </span>

                            </label>

                            <label>

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

                                <input type="checkbox" name="kboard_search_option[checkboxtime2][value]" value="2" onchange="this.form.submit()"<?php if(isset($option['checkboxtime2']['value']) && $option['checkboxtime2']['value']):?> checked<?php endif?>>

                                <span>

                                    <input type="hidden" name="kboard_search_option[checkboxtime2][compare]" value="=">10시~

                                </span>

                            </label>

                        </div>

                    </div>

                </div>

            </form>

        </div>

    </div>

 

9시와 10시가 있는데 a는 9시 b는 9시와 10시 두개의 옵션이 설정되어있습니다.

저 코드에서는 9시와 10시를 선택하면 10시 옵션이 없는 a는 검색조건에서 제외가 되어 보이지 않는데

단 한개의 조건이라도 맞으면 모두 검색 되게 하려면 어떻게 해야할까요?

 

 

3. 확인 가능한 상세 페이지 주소

https://balletzip.com

 

 

4. 수정한 코드 내역 (있다면)

 

 

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

    코드를 올려주실 때는 코드스니펫을 통해 코드를 작성해주세요.

     

    올려주신 코드만 봤을 때는 wildcard 부분이 빠진 듯 합니다.

    아래 코드와 링크를 참고하여 코드를 수정해보시겠어요?

    <input type="hidden" name="kboard_search_option[checkboxtime1][wildcard]" value="both">

    KBoard 입력 필드 검색 방법

    고맙습니다.

  • 말씀해주신 부분이 span안에 input 에 추가하면 되는걸까요?

    추가했는데 기존에 검색되던 것도 검색이 되지 않습니다..

    어느 부분에 추가를 하는게 맞는걸까요?

    	<div class="kboard-search">
            <div class="kboard-option">
                <form id="kboard-option-form-<?php echo $board->id?>" method="get" action="<?php echo $url->toString()?>">
                    <?php echo $url->set('pageid', '1')->set('target', '')->set('keyword', '')->set('mod', 'list')->toInput()?>
                    <input type="hidden" name="kboard_search_option[relation]" value="and">
                    <?php $option = kboard_search_option();?>
                    <!--시간-->
                    <div class="time">
                        <span>시간</span>
                        <div class="timeBox">
                            <div class="flex-box">
                                <label>
                                    <input type="hidden" name="kboard_search_option[checkboxtime1][key]" value="checkboxtime1">
                                    <input type="checkbox" name="kboard_search_option[checkboxtime1][value]" value="1" onchange="this.form.submit()"<?php if(isset($option['checkboxtime1']['value']) && $option['checkboxtime1']['value']):?> checked<?php endif?>>
                                    <span>
                                        <input type="hidden" name="kboard_search_option[checkboxtime1][compare]" value="=">9시~
                                        <input type="hidden" name="kboard_search_option[checkboxtime1][wildcard]" value="both">
                                    </span>
                                </label>
                                <label>
                                    <input type="hidden" name="kboard_search_option[checkboxtime2][key]" value="checkboxtime2">
                                    <input type="checkbox" name="kboard_search_option[checkboxtime2][value]" value="2" onchange="this.form.submit()"<?php if(isset($option['checkboxtime2']['value']) && $option['checkboxtime2']['value']):?> checked<?php endif?>>
                                    <span>
                                        <input type="hidden" name="kboard_search_option[checkboxtime2][compare]" value="=">10시~
                                        <input type="hidden" name="kboard_search_option[checkboxtime2][wildcard]" value="both">
                                    </span>
                                </label>
                          </div>
                      </div>
                </form>
            </div>
    	</div>
    

     

  • 남겨주신 링크에 접속하여 확인 해보니

    이해가 조금 어려운 부분이 있습니다.

     

    옵션 필드를 검색하는 기본적인 형태인

    아래의 코드로 해본 결과

    TEST라는 게시글에 AAA라는 옵션에서 1, 2 라는 값이 있을 때

    AAA 옵션 검색 필드에 1만 검색해도 TEST라는 게시글이 검색되는 것을 확인하였습니다.

    <form id="kboard-search-form-<?php echo $board->id?>" method="get" action="<?php echo esc_url($url->toString())?>">
    	<?php echo $url->set('pageid', '1')->set('target', '')->set('keyword', '')->set('mod', 'list')->toInput()?>
    
    	<?php $kboard_search_option = kboard_search_option()?>
    	
    	<input type="hidden" name="kboard_search_option[AAA][key]" value="AAA">
    	<input type="hidden" name="kboard_search_option[AAA][compare]" value="LIKE">
    	<input type="text" name="kboard_search_option[AAA][value]" value="<?php echo isset($kboard_search_option['AAA']['value']) ? $kboard_search_option['AAA']['value'] : ''?>" placeholder="AAA 옵션 필드 검색">
    
    	<input type="hidden" name="kboard_search_option[BBB][key]" value="BBB">
    	<input type="hidden" name="kboard_search_option[BBB][compare]" value="LIKE">
    	<input type="text" name="kboard_search_option[BBB][value]" value="<?php echo isset($kboard_search_option['BBB']['value']) ? $kboard_search_option['BBB']['value'] : ''?>" placeholder="BBB 옵션 필드 검색">
    
    	<button type="submit" class="kboard-default-button-small"><?php echo __('Search', 'kboard')?></button>
    </form>

     

    작성해주신 코드는 메타키가 모두 다르게 되어있는데

    그렇다면 각 시간대별로 메타기가 모두 다른 상태인건가요?

     

    글을 쓸 때 각 선택 필드가 어떻게 되어 있는지와

    메타키가 어떻게 되어있는지 알려주시겠어요?

    고맙습니다.

  • 메타키는 각각 다른 값으로 입력이 된 상태 입니다.

    <label>
        <input type="hidden" name="kboard_search_option[checkboxtime1][key]" value="checkboxtime1">
        <input type="checkbox" id="checkboxtime1" name="kboard_search_option[checkboxtime1][value]" value="1" onchange="this.form.submit()"<?php if(isset($option['checkboxtime1']['value']) && $option['checkboxtime1']['value']):?> checked<?php endif?>>
        <span>
            <input type="hidden" name="kboard_search_option[checkboxtime1][compare]" value="=">9시~
        </span>
    </label>
    <label>
        <input type="hidden" name="kboard_search_option[checkboxtime2][key]" value="checkboxtime2">
        <input type="checkbox" id="checkboxtime2" name="kboard_search_option[checkboxtime2][value]" value="2" onchange="this.form.submit()" <?php if(isset($option['checkboxtime2']['value']) && $option['checkboxtime2']['value']):?> checked<?php endif?>>
        <span>
            <input type="hidden" name="kboard_search_option[checkboxtime2][compare]" value="=">10시~
        </span>
    </label>
    <label>
        <input type="hidden" name="kboard_search_option[checkboxtime3][key]" value="checkboxtime3">
        <input type="checkbox" id="checkboxtime3" name="kboard_search_option[checkboxtime3][value]" value="3" onchange="this.form.submit()" <?php if(isset($option['checkboxtime3']['value']) && $option['checkboxtime3']['value']):?> checked<?php endif?>>
        <span>
            <input type="hidden" name="kboard_search_option[checkboxtime3][compare]" value="=">11시~
        </span>
    </label>

     

    이런 형태로 선택할 수 있는 시간 옵션을 09시부터 22시까지 list.php에 추가하였고,

    editor.php에

    <div class="kboard-attr-row">
        <div class="attr-name">시간</div>
        <div class="attr-value">
            <label for="checkboxtime1"><input type="hidden" name="kboard_option_checkboxtime1" value=""><input type="checkbox" value="1" name="kboard_option_checkboxtime1" id="checkboxtime1"<?php if($content->option->checkboxtime1 == '1') { ?> checked<?php } ?>>9시~</label>
            <label for="checkboxtime2"><input type="hidden" name="kboard_option_checkboxtime2" value=""><input type="checkbox" value="2" name="kboard_option_checkboxtime2" id="checkboxtime2"<?php if($content->option->checkboxtime2 == '2') { ?> checked<?php } ?>>10시~</label>
            <label for="checkboxtime3"><input type="hidden" name="kboard_option_checkboxtime3" value=""><input type="checkbox" value="3" name="kboard_option_checkboxtime3" id="checkboxtime3"<?php if($content->option->checkboxtime3 == '3') { ?> checked<?php } ?>>11시~</label>
        </div>
    </div>

    이런식으로 각각의 옵션값을 넣었습니다. 

    a,b,c 라는 게시글에 공통으로 포함되는 옵션

    ex) a 게시물 9시, b 게시물 9시, 10시, c 게시물 10시 라고 옵션 설정을 하였을 때 체크박스에서 9시와 10시를 선택하면 9시와 10시라는 옵션을 가진 게시물 3개가 모두 검색 되게 하고싶습니다.

     포함되지 않은 게시물은 검색되지 않는 상태입니다.

  • 해당 방식으로 홈페이지에 적용된 옵션을 검색하기에는

    DB 테이블 컬럼수가 과도하게 증가되기도 하고

    주소창에서 표현되는 최대 텍스트 길이를 초과할 여지가 있습니다.

     

    kboard_list_where 필터를 사용하여

    조건에 맞게 아예 새로 불러오는게 좋을 듯 합니다.

     

    아래 예제 코드를 참고하여 코드를 작성해보시겠어요?

    https://www.cosmosfarm.com/threads/document/44096

     

    코드를 작성하기 어려우시면

    프로젝트 의뢰에 자세한 내용을 작성해보세요.

    https://www.cosmosfarm.com/project

    고맙습니다.

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