안녕하세요.
컨텍트폼 스킨을 활용하여 예약하기 기능을 구현하고 있습니다. (회원가입 x)
고객이 문의를 하면 관리자 페이지에서 게시판 보기 기능을 활용하여 각각의 글들을 확인하고 있는데요.
사용자들이 예약하기를 사용할 때 입력한 전화번호를 체크하여
이 전화번호를 사용한 사용자가 이전에 몇 번 예약을 했는지 확인을 하고 싶습니다. (관리자페이지 게시판 리스트에서 표시되는 조회수처럼)
가능할까요? 감사합니다.
안녕하세요~^^
KBoard 게시판에서 사용자가 입력한 입력 필드의 값 기준으로
해당 값으로 등록된 게시글의 수를 카운팅하고 싶으신 건지요?
아래의 코드를 활용해보시겠어요?
<?php
$meta_key = 'phone'; // 실제 입력 필드의 값으로 적용해주세요.
$custom_list = new KBContentList($board->id);
$custom_list->addSearchOption($meta_key, $content->option->$meta_key);
$custom_list->getList();
if($content->option->$meta_key){
echo $custom_list->total;
}
?>
위의 코드에서 $meta_key = 'phone' 부분의 phone는 실제 입력 필드의 메타키(옵션키)로 적용해보세요.
게시글 목록 페이지는
FTP로 접속해서 /wp-content/plugins/kboard/skin/사용중인스킨/list.php 파일에서 표시하고 있습니다.
list.php 파일에 적당한 위치에 코드를 추가해보세요.
게시글 본문에 추가하시려면 document.php 파일에 추가해보세요.
컨택트폼(Contact Form) 스킨에서 입력 필드는
워드프레스 관리자 -> KBoard -> 게시판 목록 -> 게시판 선택 -> 입력필드 설정 탭에서 추가하실 수 있습니다.
고맙습니다.
위 코드를 아래 코드로 대체하니 검색도 제대로 작동합니다. 감사합니다.
하지만 모아보기 게시판에서 (ID:5) 리스트에서 제목 클릭하여 본문으로 이동시 인풋값 내용이 나오지 않는 현상이 발생합니다.
add_filter('kboard_list_where', 'today_best_kboard_list_where', 10, 3);
function today_best_kboard_list_where($where, $board_id, $content_list){
if($board_id == '5'){
$where = "`board_id` IN ('1', '3') AND `parent_uid`='0' AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
}
add_filter('kboard_allowed_board_id', 'kboard_allowed_board_id_20210113', 10, 2);
function kboard_allowed_board_id_20210113($allowed_board_id, $board_id){
if($allowed_board_id == '5'){ // 모아보기 게시판 ID
$allowed_board_id = array('1', '3'); // 자신과 다른 게시판의 ID값을 입력
}
return $allowed_board_id;
}
답변 감사드립니다.
답변 확인하고 궁여지책으로
1, 2번 게시판에 글이 올라오면
3번 게시판(모아보기게시판) 자동으로 업로드가 되는 방식을 사용하였습니다. (하단 코드 사용)
결과적으로 1, 2번 게시판을 한곳에 모아서 인풋값을 검색하기 위함인데요.
3번 게시판에 1, 2번 게시판 글이 정상적으로 출력이 되나
인풋값을 검색시 해당 결과값을 가진 게시글만 검색이 되는게 아닌
다른 결과값을 가진 게시물도 함께 출력이 됩니다.
추가사항 : 보드 아이디는 순서대로 생성한게 아니기에 위 임의로 말씀드린 게시판 1,2,3 명칭과 하단 코드의 보드 아이디는 다릅니다.
보드아이디 5번 : 3번 모아보기게시판
add_filter('kboard_list_where', 'today_best_kboard_list_where', 10, 3);
function today_best_kboard_list_where($where, $board_id, $content_list){
if($board_id == '5'){
$where = "`board_id` IN ('1', '3') AND `parent_uid`='0' AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
}
관리자 페이지 전체 게시글 쪽에서는 입력 필드 검색을 지원하지 않고 있습니다.
저희도 좋은 방법이 있을지 연구해보겠습니다.
고맙습니다.
감사합니다. 해결했습니다.
정말 죄송하지만, 한가지 더 여쭙겠습니다.
현재 다수의 게시판들이 있고 말씀해주신대로 셋팅을 한 상태입니다.
그리고 관리자에서 게시글보기를 통해 문의 들어온것을 확인하는데 기본 검색기능 말고 인풋필드부분도 검색이 필요하여
커뮤니티를 검색을 통해 skin/contact-form/admin-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="kboard_option_phone"<?php if(kboard_target() == 'kboard_option_phone'):?> selected<?php endif?>>전화번호</option>
<option value="title"<?php if(kboard_target() == 'title'):?> selected<?php endif?>><?php echo __('이름', 'kboard')?></option>
<option value="kboard_option_grade"<?php if(kboard_target() == 'kboard_option_grade'):?> selected<?php endif?>>등급</option>
<option value="kboard_option_gender"<?php if(kboard_target() == 'kboard_option_gender'):?> selected<?php endif?>>성별</option>
</select>
<input type="text" name="keyword" value="<?php echo esc_attr(kboard_keyword())?>">
<button type="submit" class="kboard-contact-form-button-small"><?php echo __('Search', 'kboard')?></button>
</form>
</div>
<!-- 검색폼 끝 -->
근데 현 상태는 각각의 게시판을 통해 문의한 이용자의 정보만 볼 수 있기에 통합게시판 형식으로 관리하기 위해
관리자 페이지 전체게시글 메뉴를 활용하려 합니다.
전체게시글 메뉴의 검색 부분은 pages/kborad_content_list.php로 확인 하였고, 하단 코드 부분에 위 코드를 적용하니 검색이 되지 않습니다.
염치없지만 다시한번 부탁드립니다.
<div class="kboard-content-list-search">
<form method="get">
<input type="hidden" name="page" value="kboard_content_list">
<input type="hidden" name="filter_view" value="<?php echo $table->filter_view?>">
<input type="hidden" name="filter_board_id" value="<?php echo $table->filter_board_id?>">
<select name="target">
<option value=""><?php echo __('All', 'kboard')?></option>
<option value="kboard_option_phone"<?php if(kboard_target() == 'kboard_option_phone'):?> selected<?php endif?>>전화번호</option>
<option value="title"<?php if(kboard_target() == 'title'):?> selected<?php endif?>><?php echo __('Title', 'kboard')?></option>
<option value="content"<?php if(kboard_target() == 'content'):?> selected<?php endif?>><?php echo __('Content', 'kboard')?></option>
<option value="member_display"<?php if(kboard_target() == 'member_display'):?> selected<?php endif?>><?php echo __('Author', 'kboard')?></option>
</select>
<?php $table->search_box(__('Search', 'kboard'), 'kboard_content_list_search')?>
</form>
게시판이 계속 추가될 예정이라면
이전 댓글에 안내해드린 코드 대신 별도의 함수를 만들어서 활용해야 할 듯합니다.
아래의 코드를 추가해보세요.
function kboard_option_value_count($value){
global $wpdb;
$value = esc_sql($value);
$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_option` WHERE `option_key`='phone' AND `option_value`='{$value}'");
return $count;
}
테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.
그리고 list.php 파일이나 document.php 파일에
아래의 코드로 출력하실 수 있습니다.
<?php echo kboard_option_value_count($content->option->phone)?>
고맙습니다.
답변 감사드립니다. 전문 개발자가 아니라 무슨말씀인지 파악하기가 어렵네요 ㅠ
하단 코드에서 어떤식으로 수정해야하는지 좀만 더 자세히 설명부탁드릴게요..
그리고 추후 게시판이 계속 추가로 생성된다면 그때마다 추가된 게시판 아이디로 설정된 $custom_list->total 코드를 추가해야되는걸까요?
<?php
$meta_key = 'phone'; // 실제 입력 필드의 값으로 적용해주세요.
$custom_list = new KBContentList($board->id);
$custom_list->addSearchOption($meta_key, $content->option->$meta_key);
$custom_list->getList();
if($content->option->$meta_key){
echo $custom_list->total;
}
?>
다른 게시판의 값과 더하시려면
$custom_list2 변수를 새로 추가해서
$custom_list 변수와는 다른 게시판 id로 KBContentList 초기화하신 후
$custom_list->total과 $custom_list2->total를 더해주시면 가능할 듯합니다.
위의 내용 참고하셔서 코드 수정해보시겠어요?
고맙습니다.
빠른답변 너무 감사드리고, 원하는대로 수정 완료하였습니다.
추가 문의 드리면,
1번 게시판에 1234라는 전화번호를 소유한 사용자가 2개의 글을 올리면 카운팅이 2개로 됩니다.
2번 게시판에 1234라는 전화번호를 소유한 사용자가 1개의 글을 올리면 1번, 2번 게시판의 카운팅이 3개로 되게끔 가능할까요?
kboard_list_where 필터를 활용해서
여러 게시판의 글을 한곳에서 모아서 보는 건
새로운 게시판에 게시글을 업로드하는 방식은 아닙니다.
데이터베이스(DB) 쿼리문의 WHERE 절을 편집해서
여러 게시판의 게시글을 한 게시판에서 볼 수 있도록 편집하는 방식입니다.
그리고 kboard_list_where 필터에 검색 결과도 적용하시려면
kboard_keyword() 함수를 활용해서 검색 키워드가 있는지 체크한 후
검색 키워드가 있을 경우와 없을 경우의 코드를 다르게 적용해주셔야 합니다.
그리고 말씀하신 인풋값 내용이 어떤 건지 이해가 잘 가지 않습니다.
좀 더 구체적인 상황을 설명해주시겠어요?
고맙습니다.