안녕하세요. 케이보드에 늘 감사드립니다.
두가지 질문이 있습니다.
#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')");
고맙습니다.
감사드립니다. 큰 도움 되었습니다.