한개의 게시판에서 최신글 쿼리를 카테고리 별로 다르게 설정하는 방법

한개의 게시판인데 카테고리별로 다른 조건으로 최신글을 보여주고 싶습니다.

게시판에 카테고리를 10개 생성했는데요

1. 그 중 1개의 카테고리 -> 공지글 업데이트 순서로 상단에 3개 고정 + 일반글 등록순으로 3개 

2. 나머지 9개 카테고리 -> 공지글 업데이트 순서로 상단에 1개만 고정 + 일반글 등록순으로 3개

보여주려고 합니다.

1번까지는 숏코드와 필터를 적용해서 작업이 되었는데

2번을 하려고하니 latest 스킨에 보드 아이디로 분기를 줄 수도 없고 방법을 못 찾겠네요.

제가 궁금한 것은 쿼리 만드는 법이 아니라

필터나 스킨에서 현재 선택된 카테고리를 알 수 있는 방법이 있는지 입니다.

한 게시판의 최신글을 같은 페이지에서 같은 스킨으로 보여주는 거라서

분기를 줄 수 있는 조건은 카테고리값밖에 없는데,

필터를 쓸 때 해당 숏코드에서 어떤 카테고리를 선택했는지를 알 수 있는 방법이 있는지가 궁금하네요.

 

 

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 찾아보니 필터에서 쓰는 $content_list 변수에 latest 라는배열에 숏코드에서 지정한 값들이 들어가 있군요.

    한가지 문제는 해결했는데요

    공지사항 루프를 컨트롤 할 수 있는 필터는 따로 없을까요?

    검색해보니 kboard_notice_list_orderby 라는 필터가 있던데 공식 목록에는 없네요.

    혹시 kboard_notice_list_where 이런 필터는 없나요?

    kboard_list_where 이 필터가 최신글의 공지사항 목록에는 작용이 되지 않네요.

  • 안녕하세요~^^

    KBoard 카테고리1이나 카테고리2를 사용 중이시라면

    kboard_category1() 함수를 활용하시면 선택된 카테고리1 값을 확인해보실 수 있습니다.

    kboard_category2() 함수를 활용하시면 선택된 카테고리2 값을 확인해보실 수 있습니다.

    해당 함수는

    FTP로 접속해서 /wp-content/plugins/kboard/helper/Functions.helper.php 파일에서 확인해보실 수 있습니다.

     

    올려주신 링크에는 KBoard 주요 액션과 필터에 대한 설명이 포함되어 있습니다.

    모든 액션과 필터가 안내되어 있진 않지만

    주로 사용하는 코드에 대해 설명이 되어 있습니다.

     

    그리고 kboard_notice_list_select, kboard_notice_list_from, kboard_notice_list_where 필터도 추가하시려면

    FTP로 접속해서 /wp-content/plugins/kboard/class/KBContentList.class.php 파일에

    아래의 코드를 찾아서

    $orderby = apply_filters('kboard_notice_list_orderby', "`{$this->sort}` {$this->order}", $this->board_id, $this);
    
    $this->resource_notice = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE " . implode(' AND ', $where) . " ORDER BY {$orderby}");

    아래의 코드로 교체해보세요.

    $select = apply_filters('kboard_notice_list_select', '*', $this->board_id, $this);
    $from = apply_filters('kboard_notice_list_from', "`{$wpdb->prefix}kboard_board_content`", $this->board_id, $this);
    $where = apply_filters('kboard_notice_list_where', implode(' AND ', $where), $this->board_id, $this);
    $orderby = apply_filters('kboard_notice_list_orderby', "`{$this->sort}` {$this->order}", $this->board_id, $this);
    
    $this->resource_notice = $wpdb->get_results("SELECT {$select} FROM {$from} WHERE {$where} ORDER BY {$orderby}");

     

    해당 수정사항은 아래 깃허브 코드 변경사항 쪽에서도 확인해보실 수 있습니다.

    https://github.com/cosmosfarm/KBoard-wordpress-plugin/commit/bfb2801617169093aa755173f22b327bfbb3dd04

    수정사항은 다음 업데이트에 반영하도록 하겠습니다.

    고맙습니다.

  • 각 필터 사용 예제 코드는 아래와 같습니다.

    add_filter('kboard_notice_list_select', 'kboard_notice_list_select_20211027', 10, 3);
    function kboard_notice_list_select_20211027($select, $board_id, $list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		// 이곳에 코드를 추가해보세요.
    	}
    	return $select;
    }
    
    add_filter('kboard_notice_list_from', 'kboard_notice_list_from_20211027', 10, 3);
    function kboard_notice_list_from_20211027($from, $board_id, $list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		// 이곳에 코드를 추가해보세요.
    	}
    	return $from;
    }
    
    add_filter('kboard_notice_list_where', 'kboard_notice_list_where_20211027', 10, 3);
    function kboard_notice_list_where_20211027($where, $board_id, $list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		// 이곳에 코드를 추가해보세요.
    	}
    	return $where;
    }
    
    add_filter('kboard_notice_list_orderby', 'kboard_notice_list_orderby_20211027', 10, 3);
    function kboard_notice_list_orderby_20211027($orderby, $board_id, $list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		// 이곳에 코드를 추가해보세요.
    	}
    	return $orderby;
    }

    테마의 functions.php 파일에 코드를 추가하거나 Code Snippets 플러그인을 사용해서 코드를 추가할 수 있습니다.

    고맙습니다.

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