코스모스팜 스레드

kboard 커스텀 관련 질문

kboard를 가지고 커스텀하여 커뮤니티 사이트를 구축하고 있습니다.

 

몇가지 궁금한게 있어 질문을 올립니다.

 

 

1.  워드프레스, 얼티밋 맴버스의 권한으로 해결이 되지 않아 별도의 권한을 관리하고 있습니다.

     1) 게시판에 글쓴이의 정보를 가져올때 wp_users의 기본 display_name 말고 추가적으로 다른 테이블의 정보를 가져와야 합니다.

         어떻게 가져올수 있나요? 별도의 정보는 별도의 테이블 2개에 있는 정보를 가져와야 합니다.

  

2. 글쓰기전이나 에디터 접속시 권한을 체크하여 접근을 막고 싶습니다.

   일단 글쓰기 같은 경우에는 kboard_pre_document_insert 액션으로 글 저장직전에 권한을 체크하여 그후의 로직을 실행 안되도록 하는지 알고 싶습니다.

 

3. 구축하고 있는 커뮤니티는 로그인페이지가 존재하지 않으며 클라이언트의 포탈 페이지를 통해서 SSO 로그인처리를 합니다.

   현재 kboard의 글읽기 설정을 로그인사용자로 설정했는데 비로그인 상태로 글 읽기 시도하면 로그인을 해야한다고 alert 뜬후에 로그인페이지로 이동합니다.

   별도의 페이지로 이동시키는 방법 알려주세요.

 

 

 

이 페이지의 내용이 유익하시나요? 혹은 더 많은 답변을 받길 원하시면 이 페이지를 공유 해보시는건 어떨까요?

내 홈페이지에 소셜 공유 버튼 추가하기

코스모스팜 회원관리
코스모스팜 회원관리
  • 안녕하세요~^^

    1. 회원가입 시 별도의 테이블에 데이터를 저장하시는지요?

    워드프레스의 add_user_meta 함수로 기타 정보를 저장하시면

    get_user_meta 함수로 값을 가져올 수 있습니다.

     

    워드프레스에서 DB에서 데이터를 가져오거나 입력하려면 $wpdb를 사용하시면 됩니다.

    자세한 내용은 아래의 링크를 참고해보시겠어요?

    https://codex.wordpress.org/Class_Reference/wpdb

     

    2. kboard_pre_document_insert 액션을 사용하시면

    KBoard 게시글을 저장하기 전에 권한을 체크하여 그 후의 로직을 실행 안되도록 하실 수 있습니다.

    워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에

    아래의 코드를 추가해보시겠어요?

    add_action('kboard_pre_document_insert', 'my_kboard_pre_document_insert', 10, 4);
    function my_kboard_pre_document_insert($content_uid, $board_id, $content, $board){
    	if($board_id == '1' && !is_user_logged_in()){
    		die("<script>alert('비회원은 등록할 수 없습니다.'); history.go(-1);</script>");
    	}
    }

    위의 코드는 id가 1인 KBoard 게시판에서 비회원이 게시글 작성 시 등록하지 못하게 하는 코드입니다.

    위의 코드를 권한 체크하는 코드로 변경해서 적용해보시겠어요?

     

    3. 읽기 권한이 없을 때 다른 페이지로 리다이렉트 하시려면

    워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에

    아래의 코드를 추가해보시겠어요?

    add_action('kboard_cannot_read_document', 'my_kboard_cannot_read_document', 1, 5);
    function my_kboard_cannot_read_document($action, $url, $content, $board, $board_builder){
    	if($action == 'go_login'){
    		$url = 'https://cosmosfarm.com';
    		echo '<script>alert("다른 페이지로 이동합니다.");</script>';
    		echo '<script>top.window.location.href="' . esc_url_raw($url) . '";</script>';
    	}
    }

    위의 코드에서 $url = 'https://cosmosfarm.com'; 부분은 실제 이동할 페이지 주소로 변경해주시고

    alert 창의 메시지도 적절히 수정해보시겠어요?

    alert 창을 표시하지 않으시려면 위의 코드 중에서

    아래의 코드를 지워보시겠어요?

    echo '<script>alert("다른 페이지로 이동합니다.");</script>';

    고맙습니다.

  • 2.번에 대한 추가 질문.

     

    권한이 없으면 글쓸 권한이 없다고 처리하려는데

    kboard_pre_document_insert를 실행하는 kboard 함수가

    KBContent.class.php에 있는 execute 함수에서 do_action을 하는데

     

    위에처럼 한다면 do_action 이후의 로직은 실행 안되는건가요?

     

     

     

  • 네, 맞습니다.

    이전 댓글에 안내해드린 코드를 적용한다면

    쓰기 권한이 없을 시 게시글을 저장하기 전에 이전 페이지로 이동하기 때문에

    kboard_pre_document_insert 액션 이후의 코드는 실행되지 않습니다.

    die 함수에 대해서도 참고해보시겠어요?

    고맙습니다.

  • 추가질문입니다

    게시글 본문에 유저 디스플레이네임 말고도 커스텀된 테이블에서
    유저의 다른 정보를 가져오는건
    $wpdb를 이용해서 가져오면 될거 같습니다

    다만 댓글들도 작성자의 다른 정보들을 가져와야할거 같은데
    댓글 내용이 많을경우 부하가 걸릴수 있다 생각됩니다

    kboard에서 별도의 user관련 class는 없나요?
    해당 class가 있다면 커스텀하면 될거 같은데...
  • 안녕하세요.

    KBoard 플러그인에서 사용자 정보는 게시글 작성자 id, member_display만 저장하고 있지만

    입력 필드를 활용하시면 사용자 정보 외에 다른 정보들도 추가로 저장하실 수 있습니다.

    입력 필드 추가 방법은 아래의 링크를 참고해보시겠어요?

    KBoard(케이보드) 게시판에 새로운 필드 추가하기

     

    어떤 사용자 정보가 추가로 필요하신지 알려주시면

    저희도 좋은 방법이 있을지 연구해보겠습니다.

    고맙습니다.

코스모스팜 회원관리