add_filter('wpmem_register_form_rows', 'wpmem_register_form_rows_20201020', 10, 2);
function wpmem_register_form_rows_20201020($rows, $toggle){
$members_type = isset($_GET['regtype']) ? sanitize_text_field($_GET['regtype']) : '';
if($members_type == '1'){
// 업로더일 때 실행됩니다.
unset($rows['user']);
}
else if(!$members_type || $members_type == '2'){
// 일반사용자일 때 billing_phone 필드 삭제합니다.
unset($rows['producer']);
}
return $rows;
}
add_filter('pre_option_default_role', 'my_default_registration_role');
function my_default_registration_role($default_role){
if(isset($_POST['producer']) && $_POST['producer'] == 'type1'){
// 업로더일 때 실행됩니다.
return 'producer';
}
else if(isset($_POST['user']) && $_POST['user'] == 'type2'){
// 일반사용자일 때 실행됩니다.
return 'user';
}
}
wp-members 필드에서
메타키 : producer , value : type1 , type : hidden
메타키 : user , value : type2 , type : hidden
위와 같이 설정해두어
®type=1 인 회원가입 페이지의 경우에는
메타키 : user , value : type2 , type : hidden 이 부분을 unset하고
메타키 : producer , value : type1 , type : hidden 이 부분만 POST 값으로 받아 if문에 일치하게 하여
role을 producer로 바꾸려는데
일단 unset이 먹히지가 않습니다.
일반 텍스트 필드는 unset이 잘 먹히는데 hidden 타입은 안먹히네요 왜그런걸까요?
더 좋은 방법이 있으시다면 조언 부탁드립니다 :)
올려주신 내용만으로는 정확한 원인을 파악하기 어렵습니다.
$_POST 변수에 producer가 넘어오는지 확인해보시고
$_POST['producer'] 값이 type1인지 확인해보시겠어요?
고맙습니다.
감사합니다.
®type=1 인 회원가입 페이지에서
user 필드가 성공적으로 지워졌습니다.
여전히 기본 역할로 가입이되네요
add_filter('pre_option_default_role', 'wpmem_registration_role_20211009');
function wpmem_registration_role_20211009($default_role){
$default_role = 'producer';
return $default_role;
}
혹시나해서 위의 코드로 변경해보았는데
이때는 producer로 잘 가입이됩니다.
if(isset($_POST['producer']) && $_POST['producer'] == 'type1'){
// 업로더일 때 실행됩니다.
$default_role = 'producer';
}
이 부분이 안되는거같은데 왜 그럴까요..?
안녕하세요~^^
wpmem_register_form_rows 필터에서 hidden 태그가 unset되지 않는 건
WP-Members 플러그인에서 그렇게 설정하고 있기 때문입니다.
대신 wpmem_register_fields_arr 필터를 활용해보는 건 어떨까요?
예제 코드는 아래와 같습니다.
add_filter('wpmem_register_fields_arr', 'wpmem_register_fields_arr_20211008', 10, 2);
function wpmem_register_fields_arr_20211008($wpmem_fields, $tag){
$members_type = isset($_GET['regtype']) ? sanitize_text_field($_GET['regtype']) : '';
if($members_type == '1'){
// 업로더일 때 실행됩니다.
unset($wpmem_fields['user']);
}
else if(!$members_type || $members_type == '2'){
// 일반사용자일 때 billing_phone 필드 삭제합니다.
unset($wpmem_fields['producer']);
}
return $wpmem_fields;
}
고맙습니다.