본인의 글만 보기 게시판 최신글은 모두 해제

안녕하세요! Kboard 너무 잘 활용하고 있고, 많은 도움에 항상 감사한 마음입니다. :)

[본인의 글만 보기] 가 활성화 된 게시판의
[최신글]에서는 본인의 글만 보이는게 아니라 모든 글 리스트가 노출되게 할 수 있을까요??
(제목만 노출시키고 링크 속성을 해제하려고 합니다.)

일반 게시판 리스트 > 본인의 글만 노출
최신글 리스트 > 모든 글 노출

확인 부탁드려요..!!

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    KBoard 플러그인에서 kboard_list_where 필터를 활용하시면

    게시글 목록을 불러오는 DB쿼리문의 WHERE절을 편집할 수 있습니다.

     

    리스트 보기 설정을 본인의 글만 보기로 설정하실 경우

    읽기권한과 쓰기권한을 모두 로그인 사용자 이상으로 설정해주셔야 합니다.

     

    최신글일 때는 다른 사용자의 게시글도 볼 수 있게 하시려면

    아래의 코드를 활용해보시겠어요?

    add_filter('kboard_list_where', 'kboard_list_where_2020_04_20', 10, 3);
    function kboard_list_where_2020_04_20($where, $board_id, $list){
    	if($list->is_latest && $board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$latest_where = array();
    		$latest_where[] = "`board_id`='{$board_id}'";
    		$latest_where[] = "`parent_uid`='0'";
    		$latest_where[] = "(`status`='' OR `status`='pending_approval')";
    		
    		$where = implode(' AND ', $latest_where);
    	}
    	return $where;
    }

     

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

    고맙습니다.

  • 매번 친절한 답변 정말 감사합니다. :)
    공유해주신 방법으로 잘 적용하였습니다.

    지금은 [최신글] 리스트가 로그인한 사용자에게만 노출되는데
    해당 [최신글] 리스트만 비회원(로그아웃된) 에게도 노출시킬 수 있을까요?

    검색해봐도 방법을 찾지 못해 또 여쭤봅니다..ㅠㅠ

  • 안녕하세요.

    말씀하신 것처럼 적용하시려면

    KBoard 설정 변경 및 이전 댓글에 안내해드린 코드를 조금 수정해주셔야 합니다.

     

    1. 워드프레스 관리자 -> KBoard -> 게시판 목록 -> 게시판 선택 -> 권한설정 탭에서

    리스트 보기를 전체글 보기로 설정해보세요. (본인의 글만 보기로 설정 시 코드가 동작하지 않습니다.)

     

    2. 기존의 코드 대신 아래의 코드로 교체해서 확인해보시겠어요?

    add_filter('kboard_list_where', 'kboard_list_where_2020_04_20', 10, 3);
    function kboard_list_where_2020_04_20($where, $board_id, $list){
    	if($board_id == '1'){ // 실제 게시판 id로 적용해주세요.
    		$latest_where = array();
    		
    		if($list->is_latest){
    			$latest_where[] = "`board_id`='{$board_id}'";
    			$latest_where[] = "`parent_uid`='0'";
    			$latest_where[] = "(`status`='' OR `status`='pending_approval')";
    			
    			$where = implode(' AND ', $latest_where);
    		}
    		else{
    			$user_id = get_current_user_id();
    			
    			$latest_where[] = "`board_id`='{$board_id}'";
    			$latest_where[] = "`parent_uid`='0'";
    			$latest_where[] = "`member_uid`='{$user_id}'";
    			$latest_where[] = "(`status`='' OR `status`='pending_approval')";
    			
    			$where = implode(' AND ', $latest_where);
    		}
    	}
    	return $where;
    }

    위의 코드에서 $board_id == '1' 부분은 실제 게시판 id로 적용해주세요.

    고맙습니다.

  • 적용해 보았는데 
    [최신글]은 의도했던 것처럼 잘 구현되었습니다! :)

    [일반 게시글]의 경우 관리자까지 본인의 글만 볼 수 있도록 설정된 것 같아요.
    현 상태에서 관리자는 해당 게시판의 모든 글을 볼 수 있게 설정이 가능할까요?

  • 안녕하세요.

    관리자는 모든 글을 볼 수 있게 하시려면

    이전 댓글에 안내해드린 코드 중 $board_id == '1' 부분을

    $board_id == '1' && !$board->isAdmin() 으로 교체해서 확인해보시겠어요?

    고맙습니다.

  • add_filter('kboard_list_where', 'kboard_list_where_2020_04_20', 10, 3);
    function kboard_list_where_2020_04_20($where, $board_id, $list){
        if($board_id == '1' && !$board->isAdmin()){
            $latest_where = array();        

            if($list->is_latest){
                $latest_where[] = "`board_id`='{$board_id}'";
                $latest_where[] = "`parent_uid`='0'";
                $latest_where[] = "(`status`='' OR `status`='pending_approval')";            

                $where = implode(' AND ', $latest_where);
            }

            else{
                $user_id = get_current_user_id();            

                $latest_where[] = "`board_id`='{$board_id}'";
                $latest_where[] = "`parent_uid`='0'";
                $latest_where[] = "`member_uid`='{$user_id}'";
                $latest_where[] = "(`status`='' OR `status`='pending_approval')";            

                $where = implode(' AND ', $latest_where);
            }
        }
        return $where;
    }

    말씀주신 것과 같이 테마의 function.php에서 수정하였는데,
    반영하면 홈페이지가 먹통이 됩니다.ㅠㅠ

  • 답변을 남기면서 착오가 있었습니다.

    올려주신 코드 중에서 아래의 코드를 찾아서

    if($board_id == '1' && !$board->isAdmin()){

    찾은 코드 위에 아래의 코드를 추가해보시겠어요?

    $board = new KBoard($board_id);

    고맙습니다.

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