안녕하세요
여러 글들을 참고하여 검색폼에 추가 필드 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에 적용하는 방식이 다르지 않습니다.
링크를 참고하여 코드를 적용해보시겠어요?
고맙습니다.
제가 봤을땐 링크와 크게 다르지 않게 작업을 한 것 같은데
제가 작성한 내용은 왜 전체에서 검색되지않을까요? ㅠㅅㅠ
옵션을 어떻게 입력하셨는지
메타키등의 정보와 확인가능한 링크를 남겨주시면
확인 후 저희쪽에서도 테스트 진행해보겠습니다.
고맙습니다.
안녕하세요
일단 다른 유져가 작성한 스레드에서 주신 답변을 적용해보았는데요
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
입니다.
여러개의 옵션을 검색하실 때는
아래의 코드를 활용해보시겠어요?
<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>
케이보드 입력필드 검색의 자세한 가이드는
아래 링크에서 확인하실 수 있습니다.
위 코드와 같이 옵션 필드를 입력했음에도
동작하지 않는다면 입력해두신 코드를 남겨주시겠어요?
고맙습니다.
새로 추가한 커스텀 필드가 게시판 전체 옵션 검색에서 노출이 되지 않는 문제로 글을 작성한 것이였는데
답변주신 내용과 좀 다른 것 같습니다. 제가 설명이 부족했나보네요.
답변주신 내용은 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번에서 추가된 항목(추가된 입력 필드)들이 검색되지 않습니다.
위의 내용 이후 추가 작업해야할 사항이 있을까요?
번거로우시겠지만 부탁드립니다. 앞으로도 해당 내용을 숙지해서 작업할 내용이 많을 것 같네요 ^^.
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 가이드를 참고하시면 도움이 될 듯 합니다.
고맙습니다.
주신 내용 적용해봤는데요
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 이상으로 늘리면 적용이 안됩니다.
안내해드린 코드 중 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를 직접 실행해볼 수 있는 프로그램을 통해
실행시켜 보시면 어느 부분이 오류가 있는지 정확히 확인하실 수 있습니다.
고맙습니다.
새로 작성해주신 코드도 옵션키1만 적용됩니다.
개발자가 아니다보니 코드를 수정하거나 작성하기가 힘든 상황입니다.
부탁드립니다. 감사합니다.
저희쪽에서 테스트 완료한 전체 코드를
안내해드리겠습니다.
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
고맙습니다.
작성해주신 코드 대입해보니 잘 작동됩니다.
노고에 감사드립니다!