파라미터로 검색 후 input value에 들어가 있는 값으로 kboard 리스트 나타내기

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

default

 

2. 상세 내용

안녕하세요.

timetable 플러그인을 이용하여 요일, 시간, 레벨을 선택 해서 검색 후 event_id 값을 

input value안에 값을 넣어놨습니다.

input value안에 있는 event_id 값과 게시글 입력필드에 있는 tableid(input[type=text]) 에 있는 값과

동일한 것만 게시글을 나오게 하고 싶습니다.

 

1. 검색 한 event_id을 파라미터로 보낼 수 있나요?

2. kboard_list_where 훅을 이용하여 나오게 할 수 있는 방법이 있나요?

 

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

https://balletzip.com

 

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

<?php
$timetablenum = 0;
foreach ($evnetid_Array as $key => $value) {
    // echo "<p class='eventid' id='eventid". $timetablenum ."'>".$value['event_id']."</p><br>";
    echo "<input type='text' name='kboard_search_option[tableid][value]' id='eventid". $timetablenum ."'value='" .$value['event_id']. "'><br>";
    $timetablenum++;
}
?>

 

event_id값은 foreach문으로 불러온 상태 입니다.

 

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 커뮤니티 내에서 모든 문제를 해결해드리는 것은

    현실적으로 어렵습니다.

     

    추가로 정확한 상황을 알 수 없어

    정확히 적용되는 코드의 안내도 어렵습니다.


    코드를 수정하는 것이 어려우시다면

    프로젝트 의뢰에 자세한 내용을 남겨보시겠어요?

    https://www.cosmosfarm.com/project

    고맙습니다.

  • 주신 소스를 수정해서 적용했는데,

    계층형 카테고리와 직접 짠 검색 폼이 같이 검색이 안됩니다.

    add_filter('kboard_list_from', 'my_kboard_list_from', 10, 3);
    function my_kboard_list_from($from, $board_id, $content_list){
        if($board_id == "2"){ // 실제 게시판 ID
            global $wpdb;
            
            $se_option = isset($_GET['kboard_search_option']) ? $_GET['kboard_search_option'] : '';
    
            $from = "`{$wpdb->prefix}kboard_board_content`";
    
            if(is_array($se_option)){
                // $tc = array();
                foreach($se_option as $key=>$value){ 
                    if(isset($value['value']) && $value['value']){
                        $from .= " LEFT JOIN `{$wpdb->prefix}kboard_board_option` AS `option_{$key}` ON `{$wpdb->prefix}kboard_board_content`.`uid`=`option_{$key}`.`content_uid`";
                    }
                }
            }
        }
        echo $from;
        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;
    
        //시간
        $start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : '';
        $date = date('Y-m-d', strtotime('-3 month', current_time('timestamp'))); 
        
        //쿠폰
        $chkcoupon_data = isset($_GET['chkcoupon']) ? sanitize_text_field($_GET['chkcoupon']) : '';
    
    
        $keyword = kboard_keyword();
        if(!kboard_target() && $board_id == '2'){ // 실제 게시판 id로 적용해주세요.
            $content_uid_string = get_event_id();
            $chkcoupon_uid_string = get_chkcoupon_id();
    
            $where = "`board_id`='{$board_id}'";
    
            if($keyword){
                $where .=  " AND `title` LIKE '%{$keyword}%'";
            }
    
            if($start_date){
                $where .= " AND `date` >= '{$date}'";
            }
            
            if($chkcoupon_data  != ""){
                $where .= " AND `uid` IN {$chkcoupon_uid_string}";
            }
    
            if($content_uid_string == "()"){
                $where .= " AND `uid` = -1";
            }
    
            if($content_uid_string != ""){
                $where .= " AND `uid` IN {$content_uid_string}";
            }
    
            //카테고리
            $se_option = isset($_GET['kboard_search_option']) ? $_GET['kboard_search_option'] : '';
            if(is_array($se_option)){
                foreach($se_option as $key=>$value){
                    if($value["value"] === ""){
                        continue;
                    }
                    $where .= " AND `option_{$key}`.`option_value` LIKE '{$value["value"]}'";
                }
            }
            
            $where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
        }
        return $where;
        
    }

     

    검색 시 'uid'과 'option_value'가 충돌 나는거 같은데,

    어떻게 해야댈까요?

     

  • 내부 일정이 있어 늦어졌습니다.

    아래 코드들을 활용해보시겠어요?

    KBoard list의 쿼리문 전체를 수정하는 코드입니다.

    add_filter('kboard_list_select', 'my_kboard_list_select', 10, 3);
    function my_kboard_list_select($select, $board_id, $content_list){
    	if($board_id == "1"){ // 실제 게시판 ID
    		$select = ' * ';
    	}
    	
    	return $select;
    }
    
    add_filter('kboard_list_from', 'my_kboard_list_from', 10, 3);
    function my_kboard_list_from($from, $board_id, $content_list){
    	if($board_id == 1){ // 실제 게시판 ID
    		global $wpdb;
    		
    		$se_option = isset($_GET['kboard_search_option']) ? $_GET['kboard_search_option'] : '';
    		if(is_array($se_option)){
    			$tc = array();
    			foreach($se_option as $key=>$value){
    				if(isset($value['value']) && $value['value']){
    					$tc[$key] = sanitize_text_field($value['value']);
    				}
    			}
    		}
    		
    		$from = "`{$wpdb->prefix}kboard_board_content` AS `content` LEFT JOIN `{$wpdb->prefix}kboard_board_option` AS `option0` ON `content`.`uid`=`option0`.`content_uid`";
    		if($tc){
    			for($i=1; $i<count($tc); $i++){
    				$from .= " LEFT JOIN `{$wpdb->prefix}kboard_board_option` AS `option{$i}` ON `content`.`uid`=`option{$i}`.`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){
    	if($board_id == 1){ // 실제 게시판 ID
    		global $wpdb;
    		
    		//시간
    		$start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : '';
    		$date = date('Y-m-d', strtotime('-3 month', current_time('timestamp'))); 
    		
    		//쿠폰
    		$chkcoupon_data = isset($_GET['chkcoupon']) ? sanitize_text_field($_GET['chkcoupon']) : '';
    		
    		$se_option = isset($_GET['kboard_search_option']) ? $_GET['kboard_search_option'] : '';
    		if(is_array($se_option)){
    			$tc = array();
    			foreach($se_option as $key=>$value){
    				$tc[$key] = sanitize_text_field($value['value']);
    			}
    		}
    		
    		$keyword = kboard_keyword();
    		if(!kboard_target()){
    			// $content_uid_string = get_event_id();
    			// $chkcoupon_uid_string = get_chkcoupon_id();
    			// $tree_category_1_uid_string = get_category_1_id();
    			
    			$where = "`board_id`='{$board_id}'";
    			
    			if($keyword){
    				$where .=  " AND `title` LIKE '%{$keyword}%'";
    			}
    			
    			if($start_date){
    				$where .= " AND `date` >= '{$date}'";
    			}
    			
    			if($chkcoupon_data  != ""){
    				$where .= " AND `uid` IN {$chkcoupon_uid_string}";
    			}
    			
    			if($content_uid_string == "()"){
    				$where .= " AND `uid` = -1";
    			}
    			
    			if($content_uid_string != ""){
    				$where .= " AND `uid` IN {$content_uid_string}";
    			}
    			
    			if($tc){
    				$i = 0;
    				foreach($tc as $key=>$value){
    					if($value){
    						$where .= " AND `option{$i}`.`option_key` LIKE '{$key}'";
    						$where .= " AND `option{$i}`.`option_value` LIKE '{$value}'";
    						$i++;
    					}
    				}
    			}
    			
    			$where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    		}
    	}
    	
    	return $where;
    }
    
    add_filter('kboard_list_orderby', 'my_kboard_list_orderby', 10, 3);
    function my_kboard_list_orderby($order, $board_id, $content_list){
    	if($board_id == 1){ // 실제 게시판 ID
    		$order = '`content`.`date` DESC';
    	}
    	
    	return $order;
    }

    임의로 주석처리된 함수들은 어떤 역할인지 알 수가 없어

    주석처리 해두었습니다.

     

    정확한 상황을 알 수 없어 동작하지 않을 수도 있습니다.

    홈페이지의 구성에 맞게 적절히 수정하여 사용해보시겠어요?


    위 필터들에 대한 가이드는 

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

    https://www.cosmosfarm.com/products/kboard/hooks

    고맙습니다.

  • 필터링 기능 가능합니다.

    문제는 계층형 카테고리랑 검색이 연동이 안됩니다.

     

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
        global $wpdb;
        
        //시간
        $start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : '';
        $date = date('Y-m-d', strtotime('-3 month', current_time('timestamp'))); 
        
        //쿠폰
        $chkcoupon_data = isset($_GET['chkcoupon']) ? sanitize_text_field($_GET['chkcoupon']) : '';
        
        $keyword = kboard_keyword();
        if(!kboard_target() && $board_id == '2'){ // 실제 게시판 id로 적용해주세요.
            $content_uid_string = get_event_id();
            $chkcoupon_uid_string = get_chkcoupon_id();
            $tree_category_1_uid_string = get_category_1_id();
    
            $where = "`board_id`='{$board_id}'";
    
            if($keyword){
                $where .=  " AND `title` LIKE '%{$keyword}%'";
            }
    
            if($start_date){
                $where .= " AND `date` >= '{$date}'";
            }
            
            if($chkcoupon_data  != ""){
                $where .= " AND `uid` IN {$chkcoupon_uid_string}";
            }
    
            if($content_uid_string == "()"){
                $where .= " AND `uid` = -1";
            }
    
            if($content_uid_string != ""){
                $where .= " AND `uid` IN {$content_uid_string}";
            }
    
            $where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
        }
    
        return $where;
        
    }
    

    최종 소스 수정본이고, 여기서 계층형카테고리도 같이 검색되고 싶습니다.

     

     

     

  • 안내드린 코드와 작성된 형식이 달라

    정확하게는 파악이 어렵지만

    코드만 봤을 때는 원하셨던 목적과 결과값이 일치할 듯 합니다.

     

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

    필터링이 되는듯 한데 혹시 해결되셨나요?

    고맙습니다.

  • functions.php 파일에

    function get_category_1_id(){
        if(!isset($_GET['kboard_search_option']['tree_category_1']['value'])){
            return;
        }
        // if(!isset($_GET['tree_category_1'])){
        //     return;
        // }
    
        global $wpdb;
        $tree_category_1 = $_GET['kboard_search_option']['tree_category_1']['value'];
        // $tree_category_1 = $_GET['tree_category_1'];
    
        $sql = "SELECT DISTINCT content_uid FROM wp_kboard_board_option WHERE 0=0 
                AND `option_key`='tree_category_1' AND `option_value` = '$tree_category_1'";
    
        $tree_category_1_Array = $wpdb->get_results( 
            $wpdb->prepare($sql)
        );
    
    
        $tree_category_1_uid_Array_count = count($tree_category_1_Array);
        $tree_category_1_uid_string = "(";
        for($i = 0; $i < $tree_category_1_uid_Array_count; $i++){
            if($i > 0){
                $tree_category_1_uid_string .= ", ";
            }
            $tree_category_1_uid_string .= "'{$tree_category_1_Array[$i]->content_uid}'";
        }
        $tree_category_1_uid_string .= ")";
    
        // echo var_dump($tree_category_1_uid_string);
        return $tree_category_1_uid_string;
    
    }

    이런식으로 함수를 만들어서

     

    kboard_list_where 훅으로 where절을 만들었습니다.

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
        global $wpdb;
        
        // $eventid = isset($_GET['eventid']) ? $_GET['eventid'] : '';
        // echo var_dump($eventid); return
    
        //시간
        $start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : '';
        $date = date('Y-m-d', strtotime('-3 month', current_time('timestamp'))); 
        
        //쿠폰
        $chkcoupon_data = isset($_GET['chkcoupon']) ? sanitize_text_field($_GET['chkcoupon']) : '';
        
        $keyword = kboard_keyword();
        if(!kboard_target() && $board_id == '2'){ // 실제 게시판 id로 적용해주세요.
            $content_uid_string = get_event_id();
            $chkcoupon_uid_string = get_chkcoupon_id();
            $tree_category_1_uid_string = get_category_1_id();
    
            $where = "`board_id`='{$board_id}'";
    
            if($keyword){
                $where .=  " AND `title` LIKE '%{$keyword}%'";
            }
    
            if($start_date){
                $where .= " AND `date` >= '{$date}'";
            }
            
            if($chkcoupon_data == "()"){
                $where .= " AND `uid` = -1";
            }
            
            else if($chkcoupon_data  != ""){
                $where .= " AND `uid` IN {$chkcoupon_uid_string}";
            }
    
            if($tree_category_1_uid_string == "()"){
                $where .= " AND `uid` = -1";
            }
    
            else if($tree_category_1_uid_string != ""){
                $where .= " AND `uid` IN {$tree_category_1_uid_string}";
            }
    
            if($content_uid_string == "()"){
                $where .= " AND `uid` = -1";
            }
    
            else if($content_uid_string != ""){
                $where .= " AND `uid` IN {$content_uid_string}";
            }
    
            $where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
        }
        // $where = "`uid` in {$content_uid_string}";
        // echo $sub_where;
        echo $where;
        return $where;
        
    }

     

    데이터베이스에서 조건문 확인 결과 잘 나오긴 하는데,

    리스트로는 안뿌려지내요.

     

     

  • 뭔가 잘못된 듯 합니다.

    입력하신 코드를 남겨주시면

    어떤 부분이 문제인지 확인 도와드리겠습니다.

    고맙습니다.

  • 보내주신 내용을 수정해서 검색 기능을 완성했는데,

    계층형카테고리랑 같이 검색을 하려고 하니,

    계층형 카테고리는 검색이 안되서

    option_value 값을 뽑아서 게시글 uid 검색이 되게끔 했는데,

    문법은 틀리지 않은거 같은데 검색이 안됩니다.

    계층형 카테고리 a태그에 있는 onclick 때문에 안되는 걸까요??

    위에 적어 놓은 url에 적용해 놓았습니다.

     

  • 안녕하세요~^^

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

    start_date 등의 input 태그의 name이 get 형태로 전달되는 것을

    확인할 수 있었습니다.

     

    아래의 코드를 참고하여 적용해보시겠어요?

    add_filter('kboard_list_where', 'my_kboard_list_where', 10, 3);
    function my_kboard_list_where($where, $board_id, $content_list){
    	global $wpdb;
    	
    	$start_date = isset($_GET['start_date']) ? sanitize_text_field($_GET['start_date']) : '';
    	
    	$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";
    		if($start_date){
    			$where .= " (`{$wpdb->prefix}kboard_board_option`.`option_key`='start_date' AND `{$wpdb->prefix}kboard_board_option`.`option_value` = '{$start_date}'))";
    		}
    		//...
    		$where .= " AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
    	}
    	
    	return $where;
    }

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요