안녕하세요.
이전에
https://www.cosmosfarm.com/threads/document/40701
이 내용에서 검색후에 정렬도 바꾸고싶은데요
현재는 정렬과 검색은 잘되지만 검색하고나서도 정렬이 '발행연도'(커스텀필드) 순으로 나왔으면 좋겠습니다.
가능할까요?
안녕하세요~^^
새로운 질문이 아닌 이어지는 질문이라면
이전 글의 댓글로 계속해서 남겨주시길 부탁드립니다.
저희가 확인하고 답변을 달아야 할 게시글이 늘어난다면 오히려 제대로 된 답변을 받지 못하실 수도 있습니다.
저희가 답변을 못 드리면 다른 워드프레스 사용자들로부터 답변을 기대하여야 합니다.
kboard_list_orderby 쪽 코드를 아래의 코드로도 교체해서 확인해보시겠어요?
function my_kboard_list_orderby($order, $board_id, $content_list){
global $wpdb;
if($board_id == '6'){
if(!kboard_search_option()){
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
}
else{
$order = "`option_bookyear`.`option_value` DESC";
}
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
고맙습니다.
적용시켜보니 리스트가 모두 안뜨네요.ㅠㅠ
DB확인해보니
wp_kboard_board_option 테이블에 option_key의 bookyear 기준으로 option_value의 값을 DESC 시키고싶은데.
$order = "`{$wpdb->prefix}kboard_board_option`.`option_key = bookyear`.`option_value` DESC";
이렇게 해도 아무것도 안뜨네요.
지금 kboard_search_option() 과 충돌이 있는 걸까요?
올려주신 내용만으로는 원인을 파악하기 어렵습니다.
어떤 상황에서 게시글 목록 페이지가 표시되지 않는지
좀 더 구체적은 상황을 설명해주시겠어요?
고맙습니다.
답변달아주시느라 고생많으십니다.
function.php
//kboad 6 sort
function my_kboard_list_from($from, $board_id, $content_list){
if($board_id == '6' && !kboard_search_option()){
global $wpdb;
$from = "`{$wpdb->prefix}kboard_board_content` 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_from', 'my_kboard_list_from', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
if($board_id == '6' && !kboard_search_option()){
global $wpdb;
$meta_key = 'bookyear';
$where .= " AND (`option_key`='{$meta_key}' ) ";
}
return $where;
}
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_orderby($order, $board_id, $content_list){
global $wpdb;
if($board_id == '6'){
if(!kboard_search_option()){
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
}
else {
$order = "`update` ASC";
echo "<script>console.log( 'order_Console: " . $order . "' );</script>";
}
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
list.php
<div id="kboard-post-gallery-list">
<!-- var_dump(kboard_search_option()) 1212-->
<div></div>
<!-- 검색폼 시작 -->
<div class="kboard-post-gallery-search">
<form id="kboard-search-form-<?php echo $board->id?>" method="get" action="<?php echo $url->toString()?>">
<div class="word-wrap1">
<strong>검색어</strong>
<?php echo $url->set('pageid', '1')->set('target', '')->set('keyword', '')->set('mod', 'list')->toInput()?>
<select name="target" style="width:0;height:0;overflow:hidden;position:absolute;visibility:hidden;left:-99999px;top:0;">
<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>
<input type="text" name="keyword" value="<?php echo kboard_keyword()?>" />
</div>
<div class="word-wrap2">
<strong>간행물 종류</strong>
<?php $kboard_search_option = kboard_search_option()?>
<!-- 검색 방법 (AND, OR) -->
<input type="hidden" name="kboard_search_option[relation]" value="AND">
<?php $inquiry_type = isset($kboard_search_option['inquiry_type']['value']) ? $kboard_search_option['inquiry_type']['value'] : '';?>
<input type="hidden" name="kboard_search_option[inquiry_type][key]" value="inquiry_type" />
<input type="hidden" name="kboard_search_option[inquiry_type][compare]" value="LIKE" />
<input type="hidden" name="kboard_search_option[inquiry_type][wildcard]" value="both" />
<select name="kboard_search_option[inquiry_type][value]">
<option value="">간행물 종류</option>
<option value="학술총서" <?php if($inquiry_type == '학술총서'):?> selected<?php endif?>>학술총서</option>
<option value="발굴보고서" <?php if($inquiry_type == '발굴보고서'):?> selected<?php endif?>>발굴보고서</option>
</select>
</div>
<div class="word-wrap3">
<strong>발행연도로 찾기</strong>
<?php $bookyear = isset($kboard_search_option['bookyear']['value']) ? $kboard_search_option['bookyear']['value'] : '';?>
<input type="hidden" name="kboard_search_option[bookyear][key]" value="bookyear" />
<input type="hidden" name="kboard_search_option[bookyear][compare]" value="LIKE" />
<input type="hidden" name="kboard_search_option[bookyear][wildcard]" value="both" />
<select name="kboard_search_option[bookyear][value]">
<option value="">선택하세요</option>
<?php
for($year = date("Y"); $year > 1960; $year--){
echo "<option value=".$year." ".($bookyear == $year ? 'selected' : '' ).">".$year."</option>";
}
?>
</select>
</select>
</div>
<button type="submit"class="kboard-post-gallery-button-small"><?php echo __('Search', 'kboard')?></button>
<div>
</div>
</form>
</div>
<!-- 검색폼 끝 -->
<!-- 카테고리 시작 -->
<?php
if($board->use_category == 'yes'){
if($board->isTreeCategoryActive()){
$category_type = 'tree-select';
}
else{
$category_type = 'default';
}
$category_type = apply_filters('kboard_skin_category_type', $category_type, $board, $boardBuilder);
echo $skin->load($board->skin, "list-category-{$category_type}.php", $vars);
}
?>
<!-- 카테고리 끝 -->
<!-- 리스트 시작 -->
<div class="kboard-list-cnt">
<ul>
<li>총게시물 : <span><?php echo $list->total ?></span></li>
<li>현재 페이지 : <span><?php echo $list->page ?></span></li>
<li>전체 페이지 : <span><?php echo ceil($list->total/$list->rpp) ?></span></li>
</ul>
</div>
<ul class="kboard-post-gallery-list">
<?php while($content = $list->hasNextNotice()):?>
<li class="kboard-list-item<?php if($content->uid == kboard_uid()):?> kboard-list-selected<?php endif?>">
<div class="kboard-list-inner-item">
<div class="kboard-list-thumbnail">
<?php if($content->getThumbnail(500, 500)):?>
<div class="kboard-list-thumbnail-child" style="background-image:url(<?php echo $content->getThumbnail(500, 500)?>)"></div>
<?php endif?>
<?php if(isset($content->attach->file1) && $content->attach->file1[0]):?>
<div class="over_btn">
<a href="<?php echo $content->attach->file1[0]?>"><span>미리 보기</span></a>
</div>
<?php endif?>
</div>
<div class="kboard-list-thumbnail-txt">
<div class="kboard-list-title1">
<a href="<?php echo $content->attach->file1[0]?>" target="_blank"><?php echo $content->title?></a>
<p><?php echo strip_tags($content->content); ?></p>
</div>
<div class="kboard-list-date">
<p>발행연도 <?php echo $content->option->bookyear?></p>
<?php if($board->isWriter()):?>
<a href="<?php echo $url->set('uid', $content->uid)->set('mod', 'editor')->toString()?>" class="kboard-post-gallery-button-small"><?php echo __('Edit', 'kboard')?></a>
<a href="<?php echo $url->getContentRemove($content->uid)?>" class="kboard-default-button-small" onclick="return confirm('<?php echo __('Are you sure you want to delete?', 'kboard')?>');"><?php echo __('Delete', 'kboard')?></a>
<?php endif?>
</div>
</div>
</div>
</li>
<?php endwhile?>
<?php while($content = $list->hasNext()):?>
<li class="kboard-list-item<?php if($content->uid == kboard_uid()):?> kboard-list-selected<?php endif?>">
<div class="kboard-list-inner-item">
<div class="kboard-list-thumbnail">
<?php if($content->getThumbnail(500, 500)):?>
<div class="kboard-list-thumbnail-child" style="background-image:url(<?php echo $content->getThumbnail(500, 500)?>)"></div>
<?php endif?>
<?php if(isset($content->attach->file1) && $content->attach->file1[0]):?>
<div class="over_btn">
<a href="<?php echo $content->attach->file1[0]?>" target="_blank"><span>미리 보기</span></a>
</div>
<?php endif?>
</div>
<div class="kboard-list-thumbnail-txt">
<div class="kboard-list-title1">
<a href="<?php echo $content->attach->file1[0]?>" target="_blank"><?php echo $content->title?></a>
<p><?php echo strip_tags($content->content); ?></p>
</div>
<div class="kboard-list-date">
<p>발행연도 <?php echo $content->option->bookyear?></p>
<?php if($board->isWriter()):?>
<a href="<?php echo $url->set('uid', $content->uid)->set('mod', 'editor')->toString()?>" class="kboard-post-gallery-button-small"><?php echo __('Edit', 'kboard')?></a>
<a href="<?php echo $url->getContentRemove($content->uid)?>" class="kboard-default-button-small" onclick="return confirm('<?php echo __('Are you sure you want to delete?', 'kboard')?>');"><?php echo __('Delete', 'kboard')?></a>
<?php endif?>
</div>
</div>
</div>
</li>
<?php endwhile?>
</ul>
<!-- 리스트 끝 -->
<!-- 페이징 시작 -->
<div class="kboard-pagination">
<ul class="kboard-pagination-pages">
<?php echo kboard_pagination($list->page, $list->total, $list->rpp)?>
</ul>
</div>
<!-- 페이징 끝 -->
<div class="kboard-control">
<!-- <div class="kboard-control-search">
<a href="#" onclick="kboard_post_gallery_search_toggle();return false;" title="<?php echo __('Search', 'kboard')?>"><img src="<?php echo $skin_path?>/images/icon-search.png" alt="<?php echo __('Search', 'kboard')?>"></a>
</div> -->
<?php if($board->isWriter()):?>
<div class="kboard-control-write">
<a class="kboard-post-gallery-button-small" href="<?php echo $url->set('mod', 'editor')->toString()?>"
title="<?php echo __('New', 'kboard')?>">글쓰기</a>
</div>
<?php endif?>
</div>
<?php if($board->contribution()):?>
<?php endif?>
</div>
<?php wp_enqueue_script('post-gallery-list', "{$skin_path}/list.js", array(), KBOARD_VERSION, true)?>
이렇게 되어있는데 현재 커스텀 필드를 2개 만들었습니다.
그 두개가 [inquiry_type], [bookyear] 이것들인데요.
문제는 페이지에 접근하면 리스트에서 올바르게 bookyear이 DESC로 잘 뿌려줍니다.
근데 그냥 검색 누르거나 [inquiry_type], [bookyear] 둘중에 하나만 넣고 검색하면 bookyear의 DESC 순으로 리스트가 나오지 않습니다.(date 기준으로 리스트에 뿌려줌)
지금 그래서 function.php의 my_kboard_list_orderby 부분에 if문안에 kboard_search_option() 부분이 의심이 가는데. 전체 쿼리를 볼 수가 없어서 수정이 힘드네요 ㅠㅠ
안녕하세요.
기존 코드는 입력 필드 검색이 없을 때만 동작합니다.
그렇기 때문에 inquiry_type을 검색하게되면 정렬이 bookyear로 되지 않습니다.
inquiry_type 검색 시에도 bookyear로 정렬되게 하시려면
기존의 코드 대신
아래의 코드로 교체해서 동작 확인해보시겠어요?
//kboad 6 sort
function my_kboard_list_from($from, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && !isset($search_option['bookyear'])){
$from = "`{$wpdb->prefix}kboard_board_content` 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_from', 'my_kboard_list_from', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
$meta_key = 'bookyear';
if($board_id == '6' && !isset($search_option['bookyear'])){
$where .= " AND (`option_key`='{$meta_key}' ) ";
}
return $where;
}
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_orderby($order, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && !isset($search_option['bookyear'])){
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
고맙습니다.
답변주셔서 감사합니다.
적용해보니 아무 증상 없어서 한번 console.log 찍어봤습니다.
조건에 들어가지않고 주신 소스에서 추가적인 조건을 넣었더니 아래 조건으로 들어가더군요.
<select>태그의 option의 value가 없어도 조건문에서는 !isset가 아닌 isset으로 들어가더군요.
주신소스를 조건문만 추가한 소스 올려드립니다.
페이지 진입 : 정상적으로 정렬
현재 이슈 : bookyear 또는 inquiry_type 셀렉트 선택시 ->검색 버튼 클릭 -> 정렬풀림
//kboad 6 sort
function my_kboard_list_from($from, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && !isset($search_option['bookyear'])){
$from = "`{$wpdb->prefix}kboard_board_content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`{$wpdb->prefix}kboard_board_option`.`content_uid`";
echo "<script>console.log( 'from: " . $from . "' );</script>";
} else if($board_id == '6' && isset($search_option['bookyear']) && isset($search_option['inquiry_type'])){
$from = "`{$wpdb->prefix}kboard_board_content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`{$wpdb->prefix}kboard_board_option`.`content_uid`";
echo "<script>console.log( 'from2: " . $from . "' );</script>";
}
return $from;
}
add_filter('kboard_list_from', 'my_kboard_list_from', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && !isset($search_option['bookyear'])){
$meta_key = 'bookyear';
$where .= " AND (`option_key`='{$meta_key}' ) ";
echo "<script>console.log( 'where: " . $where . "' );</script>";
} else if($board_id == '6' && isset($search_option['bookyear']) && isset($search_option['inquiry_type'])) {
$meta_key = 'bookyear';
$where .= " AND (`option_key`='{$meta_key}' )";
echo "<script>console.log( 'where2: " . $where . "' );</script>";
}
return $where;
}
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_orderby($order, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && !isset($search_option['bookyear'])){
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
echo "<script>console.log( 'order: " . $order . "' );</script>";
} else if($board_id == '6' && isset($search_option['bookyear']) && isset($search_option['inquiry_type'])) {
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
echo "<script>console.log( 'order2: " . $order . "' );</script>";
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
빠른 답변 감사합니다.
현재 간행물이라는 타입 값이 있을 때만 정렬 할 수 있게끔 만들었습니다.
문제는 where과 order 값을 넣으면 리스트가 안나오네요.
from 절은 기존 쿼리로 할 시 오류가 떠서 변경했습니다.
//kboad 6 sort
function my_kboard_list_from($from, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && empty($search_option['bookyear']['value'])){
// 연혁값이 없는 경우
if(empty($search_option['inquiry_type']['value'])){
//간행물 종류 없을시
$from = "`{$wpdb->prefix}kboard_board_content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`{$wpdb->prefix}kboard_board_option`.`content_uid`";
echo "<script>console.log( 'from1: " . $from . "' );</script>";
} else{
//간행물 종류 있을시
//$from = "`{$wpdb->prefix}kboard_board_content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`{$wpdb->prefix}kboard_board_option`.`content_uid`";
$from = "`{$wpdb->prefix}kboard_board_content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` AS `option_inquiry_type` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`option_inquiry_type`.`content_uid`";
echo "<script>console.log( 'from2: " . $from . "' );</script>";
}
} else if($board_id == '3' && !kboard_search_option()){
$from = "`{$wpdb->prefix}kboard_board_content` 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_from', 'my_kboard_list_from', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' && empty($search_option['bookyear']['value'])){
// 연혁값이 없는 경우
if(empty($search_option['inquiry_type']['value'])){
//간행물 종류 없을시
$meta_key = 'bookyear';
$where .= " AND (`option_key`='{$meta_key}' ) ";
echo "<script>console.log( 'where1: " . $where . "' );</script>";
} else {
//간행물 종류 있을시
//$meta_key = 'bookyear';
//$where .= " AND (`option_inquiry_type`.`option_key`='{$meta_key}' ) ";
//$where .= " AND (`option_inquiry_type`.`option_key`='{$meta_key}' ) ";
echo "<script>console.log( 'where2: " . $where . "' );</script>";
}
} else if($board_id == '3' && !kboard_search_option()) {
$meta_key = 'eventdate';
$where .= " AND (`option_key`='{$meta_key}' )";
}
return $where;
}
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_orderby($order, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
echo "<script>console.log( 'search_option :" .$search_option['inquiry_type']['value']."," .$search_option['bookyear']['value']. "' );</script>";
if($board_id == '6' && empty($search_option['bookyear']['value'])){
// 연혁값이 없는 경우
if(empty($search_option['inquiry_type']['value'])){
//간행물 종류 없을시
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
echo "<script>console.log( 'order1: " . $order . "' );</script>";
} else {
//간행물 종류 있을시
//$order = "`{$wpdb->prefix}kboard_board_content`.`option_value` DESC";
//$meta_key = 'bookyear';
//$order .= "`option_key` = '{$meta_key}' DESC";
echo "<script>console.log( 'order2: " . $order . "' );</script>";
}
} else if($board_id == '3') {
if(!kboard_search_option()){
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
}
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
확인해보니 조인관련 문제였습니다.
//kboad 6 sort
function my_kboard_list_from($from, $board_id, $content_list){
global $wpdb;
$search_option = kboard_search_option();
if($board_id == '6' ){
// 연혁값이 없는 경우
//간행물 종류 있을시
$from = "`{$wpdb->prefix}kboard_board_content` INNER JOIN `{$wpdb->prefix}kboard_board_option` AS `option_inquiry_type` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`option_inquiry_type`.`content_uid`";
$from .= " INNER JOIN `{$wpdb->prefix}kboard_board_option` AS `option_bookyear` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`option_bookyear`.`content_uid`";
} else if($board_id == '3' && !kboard_search_option()){
$from = "`{$wpdb->prefix}kboard_board_content` 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_from', 'my_kboard_list_from', 10, 3);
function my_kboard_list_where($where, $board_id, $content_list){
if($board_id == '6' ){
global $wpdb;
$meta_key = 'bookyear';
$where .= " AND (`option_inquiry_type`.`option_key`='inquiry_type' AND `option_bookyear`.`option_key` = 'bookyear' )";
} else if($board_id == '3' && !kboard_search_option()) {
global $wpdb;
$meta_key = 'eventdate';
$where .= " AND (`option_key`='{$meta_key}' )";
}
return $where;
}
add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
function my_kboard_list_orderby($order, $board_id, $content_list){
if($board_id == '6' ){
global $wpdb;
$order = "`option_bookyear`.`option_value` DESC";
} else if($board_id == '3' && !kboard_search_option()){
global $wpdb;
$order = "`{$wpdb->prefix}kboard_board_option`.`option_value` DESC";
}
return $order;
}
add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
현재 이렇게 소스적용하여 정상작동하고 있으며, 다른 게시판에서는 문제가 생기지 않습니다.
다른 분들도 볼 수 있게 참고겸 댓글올려드립니다.
감사합니다.