회사 내부용으로 사용할 사이트 제작을 검토중에 있습니다.
내부 사용자들만 사용가능하게 여러가지 방법을 생각하고 있는데
가입이 가능한 총 사용자 수를 제한하는 방법을 찾아보아도 못찾겠네요
관리자만 워드프레스에 가입할 수 있는 사용자의 수를 조정할 수 있고
편집자나 나머지 역할들은 관리자가 설정해 놓은 사용자 가입 제한 수의 범위 내에서만
사용자를 추가하거나 삭제할 수 있는 방법이 필요한 상황입니다.
도움부탁드리겠습니다..
안녕하세요~^^
워드프레스 사이트에서 회원가입 시 회원 수를 제한하시려면
아래 관련 링크들을 참고해보시겠어요?
https://wordpress.stackexchange.com/questions/110036/limiting-the-number-of-users
https://www.idiotinside.com/2014/12/03/limit-number-of-users-registered-in-a-wordpress-website/
고맙습니다.
답변해 수셔서 감사합니다.
링크한 정보를 사용하여 테스트한 결과..
프론트에서는 적용하려는 것처럼 등록할 수 있는 사용자의 제한 수를 넘을 경우 회원가입 버튼이 숨겨지고, 남아 있으면 나타났습니다.
그런데, 어드민에서는 수동으로 관리자 또는 편집자 등 사용자를 추가할 수 있는 역할의 회원이
사용자를 등록할 수 있는 제한의 수를 넘었는데도 여전히 사용자를 추가할 수 있습니다.
사용자를 등록할 수 있는 제한의 수를 초과한 경우 관리자 이외의 역할의 사용자에게는
사용자를 등록할 수 없도록 하고, 안내 메세지를 보여지게 하려는 것이 적용하려는 기능이었습니다.
이부분 어렵거나, 까다롭다면 등록할 수 있는 사용자의 제한 수를 초과한 경우
사용자 추가 버튼을 비활성 시키고 제한 수가 아직 남아 있을경우만 활성화 시키는 방법도 괜찮을 것 같아서
" wp_create_user " 코드와 'user-new.php' 파일을 사용하여 비활성 코드를 만들어 보려했는데..
지식이 짧아 헤매기만 했네요..
도움 부탁드리겠습니다...
안녕하세요.
check_passwords 액션을 활용해보시는 건 어떨까 합니다.
워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에
아래의 코드를 추가해보시겠어요?
add_action('check_passwords' ,'my_check_passwords', 10, 3);
function my_check_passwords($user_login, $pass1, $pass2){
$users = get_users();
$count = count($users);
if($count >= '10'){
echo "<script>alert('더 이상 가입할 수 없습니다.')</script>";
echo "<script>window.history.back();</script>";
exit;
}
}
위의 코드에서 10 부분은 제한하려는 회원 수로 적용해보세요.
고맙습니다.
알려주신 코드로 해결되었습니다.
새해복 많이 받으시고 좋은일만 있으실기 바랍니다..
감사합니다.
위 코드를 적용하여 테스트를 진행하였습니다.
가입을 제한하는 부분은 잘 동작합니다.
그런데, 제한한 사용자의 수가 풀이 되어 가입할 수 없는 경우에
회원의 정보를 수정하고 사용자 업데이트를 하면
"더 이상 가입할 수 없습니다." 메세지가 나오며 수정한 부분이 업데이트가 되질 않습니다.
안녕하세요.
기존에 추가하신 코드 대신
아래의 코드로 교체해서 확인해보시겠어요?
add_action('check_passwords' ,'my_check_passwords', 10, 3);
function my_check_passwords($user_login, $pass1, $pass2){
$users = get_users();
$count = count($users);
$user = new WP_User($user_login);
if($count >= '1' && !$user->ID){
echo "<script>alert('더 이상 가입할 수 없습니다.')</script>";
echo "<script>window.history.back();</script>";
exit;
}
}
고맙습니다.
정상적으로 작동을 합니다..
감사합니다..
테스트중에 문제가 있어서 다시 질문을 드리게 되었습니다.
워드프렛 어드민 사용자 추가에서는 잘 동작합니다.
회원가입 플러그인이나 회원과 관련된 플러그인들에서
회원을 추가하는 경우에는 위 코드가 동작하지 않고
그냥 바로 등록이 됩니다...
어드민이든지 프론트에서든지 제한한 가입자의 수가 넘을 경우에
무조건 사용자를 추가할 수 없도록 하려면 어떻게 해야 할까요?
안녕하세요.
이전 댓글에 안내해드린 check_passwords 액션이
워드프레스 관리자 페이지에서만 동작한다면
일반 페이지에서도 동작하는 코드도 추가해주셔야 할 듯합니다.
WP-Members 플러그인을 사용 중이시라면
wpmem_pre_register_data 액션을 활용해서 회원가입 전에 코드를 추가하고 실행되게 하실 수 있습니다.
예제 코드는 아래와 같습니다.
add_action('wpmem_pre_register_data', 'wpmem_pre_register_data_2020_03_02', 10, 1);
function wpmem_pre_register_data_2020_03_02($post_data){
$users = get_users();
$count = count($users);
if($count >= '10'){
echo "<script>alert('더 이상 가입할 수 없습니다.')</script>";
echo "<script>window.history.back();</script>";
exit;
}
}
고맙습니다.
알려주신 코드를 사용하여 WP-Members으로 테스트를 하였을때 워드프레스 사용자로 추가가 되지 않았습니다.
하지만, 현재 사용하고 있는 플러그인이 다른 것이라서
마지막에 알려주신 WP-Members 경우의
코드 훅을 변경하여 테스트 하였습니다.
ㄴ 플러그인이 다르다 보니 아무 동작을 하지 않았습니다.
테스트는
기존 코드와 추가코드 2개를 함께 등록하였습니다.
기존 코드
add_action('check_passwords' ,'my_check_passwords', 10, 3);
function my_check_passwords($user_login, $pass1, $pass2){
$users = get_users();
$count = count($users);
$user = new WP_User($user_login);
if($count >= '1' && !$user->ID){
echo "<script>alert('더 이상 가입할 수 없습니다.')</script>";
echo "<script>window.history.back();</script>";
exit;
}
}
WP-Members를 사용하였을 경우의 코드를 변경
add_action('user_register', 'wpmem_pre_register_data_2020_03_02', 10, 1);
function wpmem_pre_register_data_2020_03_02($user_id){
$users = get_users();
$count = count($users);
if($count >= '1'){
echo "<script>alert('등록이 가능한 회원 수를 초과 하였습니다.')</script>";
echo "<script>window.history.back();</script>";
exit;
}
}
wpmem_pre_register_data 변경 > user_register
$post_data 변경 > $user_id
user_register 후크를 사용하였을 경우
'등록이 가능한 회원 수를 초과 하였습니다.' 의 메세지가 출력되었습니다.
하지만, 여전히
워드프레스 사용자에 추가가 되는 상황입니다.
혹시나 해서 register_post 도 사용하여 테스트 하였으나,
메세지 조차도 나오질 않았습니다.
정확하게 사용하는 방법을 모르다보니
테스트 조차도 제대로 한 것인지 확실하지 않습니다.
액션과 필터 후크를 공부하고 있으나 너무 어렵네요
안녕하세요.
wpmem_pre_register_data 액션은
워드프레스 사용자가 등록되기 전에 실행됩니다.
user_register 액션은 워드프레스 사용자가 등록된 후 실행되기 때문에
user_register 액션을 활용하시면 등록이 되기 전에 체크하실 수 없습니다.
그렇기 때문에 wpmem_pre_register_data 액션을 활용하시거나
user_register 액션을 활용하실 경우 워드프레스 사용자를 등록한 후
제한 수가 넘으면 등록된 유저를 삭제하는 방향으로 진행을 하셔야 할 듯합니다.
wpmem_pre_register_data 액션에 대한 자세한 내용은
아래의 링크를 참고해보세요.
https://rocketgeek.com/plugins/wp-members/docs/filter-hooks/wpmem_pre_register_data/
user_register 액션에 대한 자세한 내용은
아래의 링크를 참고해보세요.
https://developer.wordpress.org/reference/hooks/user_register/
고맙습니다.