회원별 모아보기 게시판 3탄

질문을 너무 많이 드려 죄송스럽습니다.

일전에 회원별로 직접 올린 게시글이나 남의 글에 댓글을 달거나 남으로부터 댓글이 달린 게시글을 모아서 볼 수 있는 코드를 올려주셨는데요. 제가 지금 다시 테스트를 해보는데 본인이 올렸던 게시글 이외에는 모아지지 않더라고요. 

예를 들자면 '내가 남의 글에 쓴 댓글'이나 '남이 나의 댓글에 답글'을 적어준 게시물은 모아지지 않네요. (이메일 알림은 두 경우 모두 완벽하게 알림이 오고 있습니다.)

 

아래는 일전에 올려주신 코드입니다.


테마의 functions.php 파일에 아래의 코드를 넣고 테스트 해보시겠어요?

로그인 된 상태에서만 동작하며, 본인이 작성한 글과 댓글을 남긴 글까지 출력합니다.

add_filter('kboard_list_where', 'personal_kboard_list_where', 10, 3);
function personal_kboard_list_where($where, $board_id, $content_list){
    global $wpdb;
    if($board_id == 1){ // 모아보기 게시판의 아이디
        if(is_user_logged_in()){ // 로그인 체크
            $user_id = get_current_user_id(); // 사용자 아이디
            $where = "(`member_uid`='$user_id' OR `uid` IN (SELECT DISTINCT(`content_uid`) FROM `{$wpdb->prefix}kboard_comments` WHERE `user_uid`='$user_id')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
        }
    }
    return $where;
}


혹시 추가해야 할 코드나 수정할 부분을 알려주시면 감사하겠습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 위 코드를 적용하면

    1. 내가 쓴 글
    2. 내가 댓글을 남긴 글
    3. 답글

    글이 나오는걸 다시 확인했습니다.

    실제로 코드에도 답글을 제외하는 코드는 없으며, kboard_comments 테이블 까지 검색해서 가져오는 것을 확인 할 수 있습니다.

    다른 게시판에 적용되 됐거나 다른 코드와 충돌되는건 아닌지요?

  • 안녕하세요. 

    위에 올려주신 코드로 내 글을 모아주는 게시판을 만들었는데요.

    게시글은 잘 모아주는데 게시글을 클릭 시 "이 게시글은 이동되었습니다"라고 Alert가 뜨네요. 

    혹시 게시글을 클릭하면 해당 게시글로 바로 이동할수는 없는지요?

    감사합니다.  

  • 아 간단한 작업이 아니군요. 관련된 조언 감사합니다. 고생하셨습니다. 

  • 업데이트순서로 정렬이 되고 있다면,

    업데이트 시간은 사용자를 구분하지 않습니다.

    누군가가 댓글을 달거나 글이 수정됐거나 등등 전부 업데이트로 간주됩니다.

    따라서 나와 관련 없는 행동이라고 해도 업데이트 시간이 바뀌게 됩니다.

    아주 복잡하군요.

    나와 관련된 행동만 업데이트로 간주하게 하려면 사용자별로 게시글 정보와는 별도로 데이터를 관리해야 가능할 듯합니다.

    코드 몇 줄로는 해결이 안될 듯합니다.

    관련 기능에 대해서 연구해보겠습니다.

  • 죄송합니다. 저 관련 게시물 마지막 질문인데요. 현재 본인이 댓글을 달았던 게시물에 다른 사람의 댓글(내 댓글의 답글이 아닌)이 달리는 경우에 계속 상단으로 업데이트 되는데요. 혹시 이런 경우는 제외할 수 있나요?

    즉, 다음의 경우에만 글이 모아지는 것이죠. 

    1. 내가 쓴 게시물에 답글이나 댓글이 달린 경우. 

    2. 타인의 게시물에 내가 단 댓글의 하위로 답글이 달린 경우. (내가 댓글을 달았던 타인의 게시물에 타인이 게시글의 하위 댓글이나 하위답글을 단 경우는 제외)

     

    아래는 이전에 만들어 주신 코드입니다. 

    /* kboard 게시글 모음 */
    add_filter('kboard_list_where', 'personal_kboard_list_where', 10, 3);
    function personal_kboard_list_where($where, $board_id, $content_list){
        global $wpdb;
        if($board_id == 68){ // 모아보기 게시판의 아이디
            if(is_user_logged_in()){ // 로그인 체크
                $user_id = get_current_user_id(); // 사용자 아이디
                $where = "(`member_uid`='$user_id' OR `uid` IN (SELECT DISTINCT(`content_uid`) FROM `{$wpdb->prefix}kboard_comments` WHERE `user_uid`='$user_id')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
            }
        }
        return $where;
    }

    감사합니다. 

  • 적용해봤습니다. 잘 되네요. 정말 감사드립니다. 

  • 아래 코드를 적용하시면 최신글뷰 쪽에도 적용이 될 거예요.

    쿼리는 바뀐 게 없고, 최신글뷰에서도 동작하도록 게시판 ID 체크하는 방식이 조금 변경됐습니다.

    kboard_latestview 숏코드 사용해보세요.

     

    add_filter('kboard_list_where', 'personal_kboard_list_where', 10, 3);
    function personal_kboard_list_where($where, $board_id, $content_list){
        global $wpdb;
        $target_board_id = 1; // 모아보기 게시판의 아이디
        if($board_id == $target_board_id || (is_array($board_id) && in_array($target_board_id, $board_id))){
            if(is_user_logged_in()){ // 로그인 체크
                $user_id = get_current_user_id(); // 사용자 아이디
                $where = "(`member_uid`='$user_id' OR `uid` IN (SELECT DISTINCT(`content_uid`) FROM `{$wpdb->prefix}kboard_comments` WHERE `user_uid`='$user_id')) AND `notice`='' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')";
            }
        }
        return $where;
    }

     

    최신글 기능도 보다 개선해서 업데이트하겠습니다.

  • 감사합니다. 해결했습니다. 

    게시판의 특성상 업데이트 순으로 나와야해서 해당 게시판 자체는 기본 업데이트 순으로 나오도록 바꿨는데요. 

    이를 최신글뷰로 보기 위해서 '최신글 뷰 생성'을 해서 필요한 곳에 숏코드를 붙이니 반응을 하지 않네요. (예 : [kboard_latestview id=23]) 

    그래서 기본 게시판 최신글 뷰 보기 숏코드를 (예: [kboard_latest id=68 url=페이지주소 rpp=5]) 이용해서 올렸는데요. 이는 반응합니다. 

    혹시, 스킨의 latest.php 파일에서 기본적으로 최신글 뷰가 '업데이트순'으로 보이도록 바꿀 수 있나요?  

     

    감사합니다. 

  • 네, 다시 한번 확인해도록 하겠습니다. 감사합니다. 

  • 안녕하세요~^^

    KBoard 플러그인이 업데이트되면서

    허가되지 않은 다른 게시판에서 게시글을 불러오는 것을 차단하는 코드가 추가되었습니다.

    게시판마다 권한 설정이 다르기 때문에 게시글을 그냥 불러올 수 있다면 문제가 발생될 수 있기 때문입니다.

    아래 코드를 테마의 functions.php 파일에 추가를 해주시겠어요?

    add_filter('kboard_allowed_board_id', 'my_kboard_allowed_board_id', 10, 2);
    function my_kboard_allowed_board_id($allowed_board_id, $board_id){
    	if($allowed_board_id == '3'){ // 베스트 게시판
    		$allowed_board_id = array('3', '1', '2'); // 자신과 다른 게시판의 ID값을 입력
    	}
    	else if($allowed_board_id == '4'){ // 베스트 오브 베스트 게시판
    		$allowed_board_id = array('4', '1', '2'); // 자신과 다른 게시판의 ID값을 입력
    	}
    	return $allowed_board_id;
    }

    워드프레스 관리자 -> 테마 디자인 -> 테마 편집기 메뉴에서 functions.php 파일을 편집할 수 있습니다.

    고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기