검색폼 추가 필드, 전체 검색 미노출

안녕하세요

여러 글들을 참고하여 검색폼에 추가 필드 select를 넣어 필드 명을 selected하여 검색이 되는 것 까지 완성했습니다.

    <div class="kboard-search">
        <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()?>

            <select name="target">
                <option value=""><?php echo __('All', 'kboard')?></option>
                <option value="title" <?php if(kboard_target() == 'title'):?> selected<?php endif?>>저작물 명</option>
                <option value="kboard_option_work_code" <?php if(kboard_target() == 'kboard_option_work_code'):?> selected<?php endif?>>관리번호</option>
                <option value="kboard_option_work_artist" <?php if(kboard_target() == 'kboard_option_work_artist'):?> selected<?php endif?>>작곡</option>
                <option value="kboard_option_work_lyricist" <?php if(kboard_target() == 'kboard_option_work_lyricist'):?> selected<?php endif?>>작사</option>
                <option value="kboard_option_work_arranger" <?php if(kboard_target() == 'kboard_option_work_arranger'):?> selected<?php endif?>>편곡</option>
                <option value="kboard_option_work_album" <?php if(kboard_target() == 'kboard_option_work_album'):?> selected<?php endif?>>앨범 명</option>
            </select>
            <input type="text" name="keyword" value="<?php echo esc_attr(kboard_keyword())?>">
            <button type="submit" class="search_btn"><?php echo __('Search', 'kboard')?></button>
        </form>
    </div>

근데 새로 추가한 필드명이 전체 검색에는 노출이 안됩니다.

여기서 더 추가로 작업해야될 내용이 있을까요?

https://blog.naver.com/chan2rrj/221264876651
글을 참고하고자 햇으나 18년도 버전과 현 버전이 크게 차이가 날 것 같아 다시 한 번 스레를 세웁니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    남겨주신 링크의 글과

    현재의 KBoard에 적용하는 방식이 다르지 않습니다.

     

    링크를 참고하여 코드를 적용해보시겠어요?

    고맙습니다.

  • 저희쪽에서 테스트 완료한 전체 코드를

    안내해드리겠습니다.

    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 == '2'){ // 실제 게시판 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 == '2'){ // 실제 게시판 id로 적용해주세요.
    		$where  = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%'";
    		$where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='AAA' AND `{$wpdb->prefix}kboard_board_option`.`option_value` LIKE '%{$keyword}%')";
    		$where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='BBB' AND `{$wpdb->prefix}kboard_board_option`.`option_value` LIKE '%{$keyword}%')";
    		$where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='CCC' AND `{$wpdb->prefix}kboard_board_option`.`option_value` LIKE '%{$keyword}%'))";
    		$where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    	}
    	return $where;
    }

     

    추가하실 때는

    $where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='BBB' AND `{$wpdb->prefix}kboard_board_option`.`option_value` LIKE '%{$keyword}%')";

    이 부분을 복사하여 사용하실 수 있습니다.

    마지막 옵션인 CCC 부분을 보시면 괄호 닫힘이 하나 더 있습니다.

     

    SQL은 홈페이지 상에서 오류를 표시하지 않아

    전용 프로그램을 사용하시면 오류를 확인하실 수 있습니다.

     

    커뮤니티에서의 모든 문제 해결은

    현실적으로 어렵습니다.

     

    코드를 작성하거나 수정하기 어려우시다면

    프로젝트 의뢰에 자세한 내용을 작성해보시겠어요?

    https://www.cosmosfarm.com/project

    고맙습니다.

  • 새로 작성해주신 코드도 옵션키1만 적용됩니다.

    개발자가 아니다보니 코드를 수정하거나 작성하기가 힘든 상황입니다.
    부탁드립니다. 감사합니다.

  • 안내해드린 코드 중 where절 부분에 오타가 있었던 듯 합니다.

    아래의 코드처럼 OR 을 앞쪽으로 배치하여 누락되지 않도록

    다시 적용해보시겠어요?

    $where  = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%'";
    		$where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='옵션키1' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}'))";
    		$where .= " OR (`{$wpdb->prefix}kboard_board_option`.`option_key`='옵션키2' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}'))";

     

    이외에도 쿼리문 적용 시 wpdb 가이드를 참고하시면 도움이 됩니다.

    추가로, phpMyAdmin 과 같이 db를 직접 실행해볼 수 있는 프로그램을 통해

    실행시켜 보시면 어느 부분이 오류가 있는지 정확히 확인하실 수 있습니다.

    고맙습니다.

  • 주신 내용 적용해봤는데요

    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로 적용해주세요.
    		$where  = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%' OR";
    		$where .= " (`{$wpdb->prefix}kboard_board_option`.`option_key`='옵션키1' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}'))";
    		$where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    	}
    	return $where;
    }

    이렇게 옵션키1만 적용했을때는 전체에서 옵션키1이 반영이 되는데
    옵션키2 이상으로 늘리면 적용이 안됩니다.

  • kboard_list_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로 적용해주세요.
    		$where  = "`board_id`='{$board_id}' AND (`title` LIKE '%{$keyword}%' OR `content` LIKE '%{$keyword}%' OR";
    		$where .= " (`{$wpdb->prefix}kboard_board_option`.`option_key`='옵션키1' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}'))";
    		$where .= " (`{$wpdb->prefix}kboard_board_option`.`option_key`='옵션키2' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$keyword}'))";
    		//...
    		$where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    	}
    	return $where;
    }

     

    쿼리문 코드를 적용하실 때는

    wpdb 가이드를 참고하시면 도움이 될 듯 합니다.

    고맙습니다.

  • 새로 추가한 커스텀 필드가 게시판 전체 옵션 검색에서 노출이 되지 않는 문제로 글을 작성한 것이였는데
    답변주신 내용과 좀 다른 것 같습니다. 제가 설명이 부족했나보네요.

    답변주신 내용은 input을 추가하여 and로 검색하는 내용이 맞나요?

     

    처음부터 제가 작업한 내용을 설명 드리자면 아래와 같습니다.
    1. 해당 게시판 입력필드 설정에서 입력필드 추가하였음. (추가된 메타키 : work_code, work_artist, work_songwriter, work_lyricist, work_arranger, work_album / 기존 title에 저작물 명 삽입)
    2. 사용하는 게시판 스킨 list.php에 

        <!-- 검색폼 시작 -->
        <div class="kboard-search">
            <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()?>
    
                <select name="target">
                    <option value=""><?php echo __('All', 'kboard')?></option>
                    <option value="title" <?php if(kboard_target() == 'title'):?> selected<?php endif?>>저작물 명</option>
                    <option value="kboard_option_work_code" <?php if(kboard_target() == 'kboard_option_work_code'):?> selected<?php endif?>>관리번호</option>
                    <option value="kboard_option_work_songwriter" <?php if(kboard_target() == 'kboard_option_work_songwriter'):?> selected<?php endif?>>아티스트 명</option>
                    <option value="kboard_option_work_artist" <?php if(kboard_target() == 'kboard_option_work_artist'):?> selected<?php endif?>>작곡</option>
                    <option value="kboard_option_work_lyricist" <?php if(kboard_target() == 'kboard_option_work_lyricist'):?> selected<?php endif?>>작사</option>
                    <option value="kboard_option_work_arranger" <?php if(kboard_target() == 'kboard_option_work_arranger'):?> selected<?php endif?>>편곡</option>
                    <option value="kboard_option_work_album" <?php if(kboard_target() == 'kboard_option_work_album'):?> selected<?php endif?>>앨범 명</option>
                </select>
                <input type="text" name="keyword" value="<?php echo esc_attr(kboard_keyword())?>">
                <!-- 옵션 필드 검색 데이터를 초기화 -->
                <?php $kboard_search_option = kboard_search_option()?>
    
                <!-- 검색 방법 (AND, OR) -->
                <input type="hidden" name="kboard_search_option[relation]" value="AND">
    
                <button type="submit" class="search_btn"><?php echo __('Search', 'kboard')?></button>
            </form>
        </div>
        <!-- 검색폼 끝 -->

    이렇게 수정하였습니다.

     

    select 개별 옵션 선택하여 검색시엔 잘 뜨는데요.
    전체 옵션 선택시, 1번에서 추가된 항목(추가된 입력 필드)들이 검색되지 않습니다.

     

    위의 내용 이후 추가 작업해야할 사항이 있을까요?
    번거로우시겠지만 부탁드립니다. 앞으로도 해당 내용을 숙지해서 작업할 내용이 많을 것 같네요 ^^.

  • 여러개의 옵션을 검색하실 때는

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

    <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>

     

    케이보드 입력필드 검색의 자세한 가이드는

    아래 링크에서 확인하실 수 있습니다.

    KBoard(케이보드) 입력 필드 검색 방법

     

    위 코드와 같이 옵션 필드를 입력했음에도

    동작하지 않는다면 입력해두신 코드를 남겨주시겠어요?

    고맙습니다.

  • 안녕하세요

    일단 다른 유져가 작성한 스레드에서 주신 답변을 적용해보았는데요
    https://www.cosmosfarm.com/threads/document/30898

    $option_key 값에 한 필드를 넣어서 반영해보니 전체 검색에 적용되는 것을 확인했습니다. (아티스트 명 필드 (work_artist)로 적용)
    $option_key가 단일 필드가 아닌 멀티로는 어떻게 소스를 짜야할까요?

    작업 중인 사이트 링크는 
    https://musistics.mycafe24.com/%EC%A0%80%EC%9E%91%EA%B6%8C/%EC%A0%80%EC%9E%91%EA%B6%8C-%EA%B2%80%EC%83%89
    입니다.

  • 옵션을 어떻게 입력하셨는지

    메타키등의 정보와 확인가능한 링크를 남겨주시면

    확인 후 저희쪽에서도 테스트 진행해보겠습니다.

    고맙습니다.

  • 제가 봤을땐 링크와 크게 다르지 않게 작업을 한 것 같은데
    제가 작성한 내용은 왜 전체에서 검색되지않을까요? ㅠㅅㅠ

  • 작성해주신 코드 대입해보니 잘 작동됩니다.
    노고에 감사드립니다!

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