안녕하세요,
항상 감사한 마음으로 플러그인을 사용하고 있습니다.
다름 아니라, 회원가입 시 닉네임에 글자 수 제한을 두고 싶은데 어떻게 하면 구현할 수 있을까요?
제가 검색을 통해 시도해본 코드는 아래 2가지인데 둘다 작동하지 않아서 문의 드립니다.
아울러, 제가 중복 확인 기능을 사용하고 있는데 해당 validation에 글자 수 제한 스크립트를 추가하는 방법이 있을까요?
1.function.php 파일에 코드 추가
//닉네임 글자수 제한
add_action('personal_options_update', 'update_extra_profile_fields', 10, 1);
function update_extra_profile_fields($user_id){
$nickname = isset($_POST['nickname'])&&$_POST['nickname'] ? sanitize_text_field($_POST['nickname']) : '';
$length = mb_strlen($nickname, 'utf-8');
if($length < 2 || $length > 12){
echo "<script>alert('별칭은 2글자 이상 12자 이하만 입력 가능합니다.'); history.go(-1);</script>";
exit;
}
}
2.코스모스팜 회원관리 플러그인 skin 폴더 내 script 파일
//아이디 길이 제한 스크립트
if(jQuery('input[name="display_name"]').length){
var value = jQuery('input[name="display_name"]').val();
var check = true;
for(var i = 0; i < value.length; i++){
var chr = value.substr(i,1);
chr = escape(chr);
if(chr.charAt(1) == "u"){
chr = chr.substr(2, (chr.length - 1));
if((chr < "AC00") || (chr > "D7A3")){
check = false;
}
}
else{
check = false;
}
}
if(check){
if(value.length < 2 || value.length > 12){
alert('한글은 2~12자만 허용됩니다.');
return false;
}
}
else{
if(value.length < 2 || value.length > 16){
alert('영어는 2~16자만 허용됩니다.');
return false;
}
}
}
감사합니다
안녕하세요~^^
본문에 코드를 올려주실 땐
반드시 에디터의 코드 스니펫 삽입 기능으로 올려주시길 부탁드립니다.
그렇지 않으면 코드가 이상해져서 에러 나는 코드로 바뀌거나,
질의응답 시 의사소통에 오해와 문제가 생길 수도 있습니다.
현재 회원가입 시 닉네임 필드는 어떤 필드로 입력받고 있으신지요?
올려주신 코드는 회원가입 필드 중 메타키가 nickname인 필드에 적용됩니다.
다른 필드로 닉네임을 받고 있다면 해당 필드 메타키로 교체해서 확인해보시겠어요?
워드프레스 관리자 -> 설정 -> WP-Members -> 필드 탭에서
필드 메타키를 확인하실 수 있습니다.
고맙습니다.
현재 닉네임필드는 display_name으로 받고 있습니다. display name으로 바꾸어서 회원정보 페이지에서 긴아이디로 수정을 해보았는데 수정이되어버립니다.
안녕하세요.
실제 추가하신 코드는 어떻게 되시는지요?
회원가입 및 회원정보 수정 시 메타키가 display_name인 필드의 길이를 체크하시려면
워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에
아래의 코드를 추가해보시겠어요?
add_action('wpmem_pre_register_data', 'my_wpmem_pre_register_data', 10, 1);
add_action('wpmem_post_update_data', 'my_wpmem_pre_register_data', 10, 1);
function my_wpmem_pre_register_data($fields){
$display_name = isset($fields['display_name']) ? $fields['display_name'] : '';
$length = mb_strlen($display_name, 'utf-8');
if($length < 2 || $length > 12){
echo "<script>alert('별칭은 2글자 이상 12자 이하만 입력 가능합니다.'); history.go(-1);</script>";
exit;
}
}
고맙습니다.
말씀 주신 코드 입력해서 테스트해봤는데 회원가입 시에는 회원가입이 되지 않고 alert 를 띄우면서 완벽하게 회원가입을 방지해줍니다
그런데 회원정보 수정화면에서 프로필 업데이트를 하게되면 수정이 됩니다.
정확히 말하면 alert가 뜨고 회원정보 수정 페이지에 머물지만 실제로는 닉네임이 바뀐 상태입니다.
혹시나 이런 경우는 어떻게 해결하면 좋을까요?
안녕하세요.
회원정보 수정이 되기 전에 체크를 해야 할 듯합니다.
이전 댓글에 안내해드린 코드 중 wpmem_post_update_data 부분을
wpmem_pre_update_data로 교체해서 확인해보시겠어요?
wpmem_pre_update_data 액션은 실제 회원정보 업데이트가 되기 전에 실행됩니다.
자세한 내용은 아래의 링크를 참고해보시겠어요?
https://rocketgeek.com/plugins/wp-members/docs/filter-hooks/wpmem_pre_update_data/
고맙습니다.
항상 친절한 답변 감사 드립니다. 관리자님의 답변으로 워드프레스에 대한 이해가 나날이 늘어갑니다. 항상 답변을 공부하는 마음으로 보고 있습니다. 감사합니다.