글쓰기 제한, 게시글 우선순위 관련 질문입니다.

안녕하세요. 케이보드에 늘 감사드립니다.

두가지 질문이 있습니다.

 

#1

회원등급에 따라 하루 글쓰기 횟수를 제한하고 싶습니다.

3등급 : 3개

2등급: 4개

1등급: 5개

예를 들면 이런 식인데요.

기존 질문의 코드로는 충족이 안되어 새롭게 질문을 드립니다.

 

#2

두번째 문제가 더 까다로운 것 같은데요 ^^;

공지사항과는 별개로 1등급 회원들이 글을 썼을 때 상위 10개 리스트에 노출이 되었으면 합니다.

위치는 공지사항과 일반 글 사이에 넣고싶은데요.

공지글 목록
우선순위 글 10개
일반글 목록

가능할까요?

감사합니다.

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

    1. 워드프레스에서는 회원등급이라는 개념은 없으며 역할(Role)만 있습니다.

    사용자 역할은 User Role Editor 플러그인을 사용해서 새로 추가하고 관리하실 수 있습니다.

    워드프레스 역할과 권한에 대한 자세한 내용은

    아래의 링크를 참고해보세요.

    https://codex.wordpress.org/Roles_and_Capabilities

     

    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){
    	global $wpdb;
    	
    	if($board_id == '1' && is_user_logged_in() && !$board->isAdmin()){
    		$user_id = get_current_user_id();
    		$userdata = get_userdata($user_id);
    		
    		$date = date('Ymd000000', current_time('timestamp'));
    		
    		if(in_array('subscriber', $userdata->roles)){
    			$content_count = 1;
    		}
    		else if(in_array('editor', $userdata->roles)){
    			$content_count = 3;
    		}
    		else{
    			$content_count = 5;
    		}
    		
    		$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `member_uid` = '{$user_id}' AND `date` > '{$date}'");
    		
    		if($count >= $content_count){
    			die("<script>alert('오늘은 더 이상 등록할 수 없습니다.'); history.go(-1);</script>");
    		}
    	}
    }

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

    $content_count 부분은 하루에 제한하는 게시글의 수입니다.

    위의 코드를 실제 적용하시면 구독자(subscriber) 역할은 하루에 1번만 글을 쓸 수 있고

    편집자(editor) 역할은 3번, 그 외의 역할은 5번 쓸 수 있습니다.

    게시글 쓰기권한은 로그인 사용자로 적용해주세요.

     

    2. 현재는 그러한 기능을 제공하고 있지 않습니다.

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

    고맙습니다.

  • 답변 감사드립니다.

    그렇다면 혹시 이부분은 가능할까요?

     

    #1

    공지사항의 갯수를 10개로 제한한다.

    #2

    공지사항을 2단계로 나누어 권한을 각각 다르게 설정한다.

     

    질문하면서도 어려운 부분이라는 생각이 드는데요...

    일단 질문은 해 본다는 심정으로 올립니다.

  • 안녕하세요.

    커뮤니티에서 모든 코드를 만들어 드리는 것은 현실적으로 불가능하기도 하고

    말씀하신 것처럼 하시려면 단순히 코드 몇 줄로는 해결되지 않을 듯합니다.

    저희도 고민이 필요해 보입니다.

    연구해보고 좋은 방법을 찾게 되면 안내해드리겠습니다.

    고맙습니다.

  • 추가로 여쭙겠습니다.

    회원이 총 9등급으로 나누어져 있어, 3그룹으로 묶어 글쓰기 제한을 하려고 합니다.

    제 코드가 맞나 봐주시겠어요?

    in_array('9_new' && '8_silver' && '7_gold', $userdata->roles)

    세등급을 묶으려면 이렇게 표현하는 것이 맞나요?

    이렇게 쓰니 적용이 잘 안되는 것 같습니다.

  • 안녕하세요.

    3개의 역할에 적용하시려면

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

    in_array('9_new', $userdata->roles) && in_array('8_silver', $userdata->roles) && in_array('7_gold', $userdata->roles)

     

    PHP in_array 함수에 대한 자세한 내용은

    아래의 링크를 참고해보세요.

    http://php.net/manual/kr/function.in-array.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){
    	global $wpdb;
    	if($board_id == '6' && is_user_logged_in() && !$board->isAdmin()){
    		$user_id = get_current_user_id();
    		$userdata = get_userdata($user_id);
    		$date = date('Ymd000000', current_time('timestamp'));
    		if(in_array('administrator', $userdata->roles)){
    		$content_count = 5003;
    		}
    		else if(in_array('3_vvip3', $userdata->roles) && in_array('2_vvip2', $userdata->roles) && in_array('1_vvip1', $userdata->roles)){
    		$content_count = 1;
    		}
    		else{
    		$content_count = 2;
    		}
    		$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `member_uid` = '{$user_id}' AND `date` > '{$date}'");
    		if($count >= $content_count){
    		die("<script>alert('오늘은 더 이상 등록할 수 없습니다.'); history.go(-1);</script>");
    		}
    	}
    }

    이렇게 써 넣으니, 3_vvip3, 2_vvip2, 1_vvip1 도 2번으로 제한이 걸려 다시 여쭙습니다.

    제 의도는 하루 글쓰기 제한을

    운영자 : 무한대

    나머지 등급 : 2번

    으로 하루 글쓰기를 제한하고 싶습니다.

    코드를 살펴보아 주실 수 있을까요?

     

    + 추가 질문

    3_vvip3, 2_vvip2, 1_vvip1 : 평생 딱 하나만 글을 발행할 수 있게 제한을 걸어, 쓴 글을 계속 수정만 하도록 하고싶은데요. 가능한가요?

  • 안녕하세요.

    해당 코드는 게시판 관리자에게는 적용되지 않습니다.

    3_vvip3, 2_vvip2, 1_vvip1 역할을 가진 사용자는 해당 게시판에 한 번만 작성하고

    다른 역할의 사용자는 하루에 2번만 게시글을 작성할 수 있게 하시려면

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

    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){
    	global $wpdb;
    	if($board_id == '6' && is_user_logged_in() && !$board->isAdmin()){
    		$user_id = get_current_user_id();
    		$userdata = get_userdata($user_id);
    		$date = date('Ymd000000', current_time('timestamp'));
    		
    		if(in_array('3_vvip3', $userdata->roles) || in_array('2_vvip2', $userdata->roles) || in_array('1_vvip1', $userdata->roles)){
    			$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}'");
    			if($count > 0){
    				die("<script>alert('더 이상 등록할 수 없습니다.'); history.go(-1);</script>");
    			}
    		}
    		else{
    			$content_count = 2;
    			$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}' AND `date` > '{$date}'");
    			if($count >= $content_count){
    				die("<script>alert('오늘은 더 이상 등록할 수 없습니다.'); history.go(-1);</script>");
    			}
    		}
    	}
    }

    이전 댓글에 안내해드린 코드에 오류가 있어서 개선해서 올려드리겠습니다.

    고맙습니다.

  • 네. 일차적으로 적용이 잘 되었습니다.

    그런데 하루에 두개의 글을 쓸 수 있는 회원의 경우, 두 개의 글을 발행하였다가 삭제를 하여도 똑같이 두 개를 쓴 걸로 인식이 되나요?

    글 두 개 발행 -> 두 개 모두 삭제 -> 다시 글쓰기

    를 하니 글이 안써지는데요.

    혹시 삭제한 것까지 계산하여 하루에 두 개로 제한할 수 있을까요?

  • 안녕하세요.

    KBoard 플러그인에서 게시글 바로 삭제 기능이 비활성화되어 있다면

    게시글 삭제 시 휴지통으로 이동합니다.

    활성화되어 있다면 데이터베이스에서 바로 삭제되기 때문에

    게시글 작성 -> 모두 삭제하시면 다시 글을 쓸 수 있습니다.

     

    이전 댓글에 안내해드린 코드에서 휴지통에 있는 게시글은 제외하시려면

    아래의 코드를 각각 찾아서

    $count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}'");
    $count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}' AND `date` > '{$date}'");

    아래의 코드로 각각 교체해보시겠어요?

    $count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')");
    $count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`='{$board_id}' AND `member_uid` = '{$user_id}' AND `date` > '{$date}' AND (`status`='' OR `status` IS NULL OR `status`='pending_approval')");

    고맙습니다.

  • 감사드립니다. 큰 도움 되었습니다.

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