안녕하세요.
코스모스팜 회원가입 플러그인을 사용중에 질문이 있어서 문의 드립니다.
회원가입 시 뉴스레터 및 이메일 서비스와 SMS 서비스 처럼 마케팅 동의를 얻기위해
필수동의가 아닌 선택동의의 체크박스 필드를 만들려고 합니다.
고객이 체크하거나 체크 하지 않았다는 데이터를 확인하려면 어떻게 해야하나요?
필수동의 시 동의를 하지 않으면 회원가입 자체가 되지 않기떄문에 알겠지만
선택동의 시 고객이 어떤 선택을 했는지 확인 할 수 있는 방법을 알려주시면 감사하겠습니다.
감사합니다.
안녕하세요~^^
코스모스팜 회원관리 플러그인을 사용 중이시라면
회원가입 시 입력 필드는 사용자의 메타데이터로 추가됩니다.
그렇기 때문에 get_user_meta 함수로 체크하실 수 있습니다.
로그인한 사용자가 회원가입 또는 회원정보 페이지에서
특정 필드를 입력 및 선택했을 경우,
체크해서 안내메시지를 표시하는 코드를 작성해봤습니다.
아래의 코드를 활용해보시겠어요?
$user_id = get_current_user_id();
$policy_service = get_user_meta($user_id, 'policy_service', true);
if($policy_service){
echo '이용약관에 동의하셨습니다.<br>';
}
위의 코드 중 get_user_meta($user_id, 'policy_service', true)에서
policy_service 부분은 실제 필드의 메타키로 적용해보세요.
워드프레스 관리자 -> 설정 -> WP-Members -> 필드 탭에서
해당 필드 메타키를 확인하실 수 있습니다.
고맙습니다.
안녕하세요. 우선 빠른 답변 감사합니다.
답변주신 내용에서 좀 어려운 부분이 있는데
$user_id = get_current_user_id();
$policy_service = get_user_meta($user_id, 'policy_service', true);
if($policy_service){
echo '이용약관에 동의하셨습니다.<br>';
}
1. 위 코드를 어디에 작성을 해야하는지 알려주시면 감사하겠습니다.ㅠ
2. 제가 문의한 내용은 고객이 선택 동의 한 데이터를 관리자가 어디에서 어떻게 확인을 할 수 있는지를 문의한 내용이었는데, 잘 전달이 됐을까요?ㅠ
고객이 선택한 필드를 '이용약관에 동의하셨습니다.<br>'라는 메시지로 고객이 확인하는 방법이 아니라
아래와 같은 예시로 관리자가 고객이 선택한 데이터를 확인하는 방법을 문의 드리고자 합니다.
예를들어 관리자가 https://imgur.com/a/SsP9nmk
A고객은 SMS수신(선택)를 동의 했고, 이메일수신(선택)은 동의하지 않았다.
B고객은 SMS, 이메일 모두 수신 동의를 했다.
C고객은 SMS, 이메일 모두 수신하지 않았다.
와 같은 데이터를 확인하려면 어떻게 해야 하나요?
혹시 제가 질문한 의도대로 잘 답변하셨고 제가 이해를 못하고 있다면 말씀 부탁드립니다.ㅠ
감사합니다.
관리자가 사용자별로 가입 시 체크박스를 체크했는지 여부를 확인하시려면
워드프레스 관리자 -> 사용자 -> 모든 사용자 쪽에서 확인하는 방법이 있습니다.
회원가입 페이지에 필드 추가하는 방법부터 안내해드리겠습니다.
1. 우선, 올려주신 링크의 이미지처럼 적용하시려면
워드프레스 관리자 -> 설정 -> WP-Members -> 필드 탭에서
필드 추가 버튼을 눌러보세요.
2. 아래의 정보처럼 필드 2개를 만들어주세요.
필드 레이블 : 뉴스레터 및 이메일 서비스
Meta Key : newsletter_email_service
필드 타입 : checkbox
표시? : 체크
체크된 경우 저장된 값 : agree
필드 레이블 : SMS 서비스
Meta Key : sms_service
필드 타입 : checkbox
표시? : 체크
체크된 경우 저장된 값 : agree
위의 필드 설정 중 체크된 경우 저장된 값은
워드프레스 관리자 -> 사용자 -> 모든 사용자 페이지에서 표시될 값입니다.
적절히 수정해주셔도 됩니다.
3. 워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에
아래의 코드를 추가해보세요.
add_filter('manage_users_columns', 'my_last_login_manage_users_columns', 10, 1);
function my_last_login_manage_users_columns($columns) {
$columns['newsletter_email_service'] = '뉴스레터 및 이메일 서비스';
$columns['sms_service'] = 'SMS 서비스';
return $columns;
}
add_filter('manage_users_custom_column', 'my_last_login_manage_users_custom_column', 10, 3);
function my_last_login_manage_users_custom_column($output, $column_name, $user_id){
if($column_name == 'newsletter_email_service'){
$output = get_user_meta($user_id, 'newsletter_email_service', true);
}
if($column_name == 'sms_service'){
$output = get_user_meta($user_id, 'sms_service', true);
}
return $output;
}
위의 코드를 추가하시면
워드프레스 관리자 -> 사용자 -> 모든 사용자 페이지에서 추가한 입력 필드를 추가적으로 표시할 수 있습니다.
고맙습니다.
자세한 답변 감사합니다.
알려주신데로 적용하니 사용자 페이지에서 선택동의로 추가한 필드가 표시됩니다..
다만, 새로 추가한 체크박스 위치가
기존 개인정보와 이용약관의 동의 체크박스와 다른데
필드레이블 > 체크박스 순서 처럼 체크박스 위치가 우측이 아닌
체크박스 > 필드레이블 순서 처럼 좌측으로 위치를 변경하려면
어떻게 수정 해야하나요?
감사합니다.
wpmem_register_form_rows 필터를 활용하시면
말씀하신 것처럼 필드 레이블 앞에 체크박스를 표시할 수 있습니다.
테마 쪽 functions.php 파일 하단에
아래의 코드도 추가해보시겠어요?
add_filter('wpmem_register_form_rows', 'my_wpmem_register_form_rows', 10, 2);
function my_wpmem_register_form_rows($rows, $toggle){
$rows['newsletter_email_service']['field'] = $rows['newsletter_email_service']['field'] . $rows['newsletter_email_service']['label'];
$rows['newsletter_email_service']['label'] = '';
$rows['sms_service']['field'] = $rows['sms_service']['field'] . $rows['sms_service']['label'];
$rows['sms_service']['label'] = '';
return $rows;
}
wpmem_register_form_rows 필터에 대한 자세한 내용은
아래의 링크를 참고해보세요.
https://rocketgeek.com/plugins/wp-members/docs/filter-hooks/wpmem_register_form_rows/
고맙습니다.
안녕하세요.
알려주신 해당 코드
add_filter('wpmem_register_form_rows', 'my_wpmem_register_form_rows', 10, 2);
function my_wpmem_register_form_rows($rows, $toggle){
$rows['newsletter_email_service']['field'] = $rows['newsletter_email_service']['field'] . $rows['newsletter_email_service']['label'];
$rows['newsletter_email_service']['label'] = '';
$rows['sms_service']['field'] = $rows['sms_service']['field'] . $rows['sms_service']['label'];
$rows['sms_service']['label'] = '';
return $rows;
}
를 functions.php에 넣어서 저장을 하니
사이트 접속이 되지 않고 아래와 같은 메시지가 발생합니다.
어떤부분을 수정해야 할까요?ㅠ
감사합니다.
안녕하세요.
코드 상에는 문제없어 보입니다.
올려주신 내용만으로는 해당 메시지가 뜨는 원인을 파악하기 어렵습니다.
디버그 모드를 활성화해서 오류 메시지가 있는지 확인해보시겠어요?
고맙습니다.
안녕하세요. 디머그모드를 활성화 하니
아래와 같은 메시지가 표시됩니다.
Fatal error: Cannot redeclare my_wpmem_register_form_rows() (previously declared in /home/***/public_html/wp-content/themes/***/functions.php:126) in /home/***/public_html/wp-content/themes/***/functions.php on line 325
The site is experiencing technical difficulties.
이전에 알려주셔서 작성했던 회원 정보 수정 시, 이용약관 & 개인정보처리방침 삭제 내용의
부분과 충돌이 일어난것 같습니다.
그리고 functions.php:126 부분은 아래 첨부한 코드의
function my_wpmem_register_form_rows($rows, $toggle){
라인이고
functions.php on line 325 부분은
위에서 알려주셨던 체크박스와 필드레이블 순서를 바꾸는 코드의 끝 라인입니다.
//회원 정보 수정 시, 이용약관 & 개인정보처리방침 삭제
add_filter('wpmem_register_form_rows', 'my_wpmem_register_form_rows', 999, 2);
function my_wpmem_register_form_rows($rows, $toggle){
if($toggle == 'edit'){
$user = wp_get_current_user();
$policy_privacy = get_user_meta($user->ID, 'policy_privacy', true);
$policy_service = get_user_meta($user->ID, 'policy_service', true);
// 이용약관
if(isset($rows['policy_service']) && $policy_service){
$rows['policy_service']['field_before'] = '';
$rows['policy_service']['label'] = '';
$rows['policy_service']['field'] = '<input type="hidden" name="policy_service" value="agree">';
}
// 개인정보
if(isset($rows['policy_privacy']) && $policy_privacy){
$rows['policy_privacy']['field_before'] = '';
$rows['policy_privacy']['label'] = '';
$rows['policy_privacy']['field'] = '<input type="hidden" name="policy_privacy" value="agree">';
}
}
return $rows;
}
회원 정보 수정 시, 이용약관 & 개인정보처리방침 삭제 내용의 코드를 어떻게 수정해야 할까요
또는, 체크박스와 필드레이블 순서를 바꾸는 코드를 어떻게 수정해야 할까요?
감사합니다.
안녕하세요.
올려주신 에러 메시지를 확인해보니 PHP 함수명 중복 문제로 보입니다.
워드프레스 액션과 필터는 중복해서 추가할 수 있지만
PHP 함수명은 중복되면 안 됩니다.
올려주신 코드 중 my_wpmem_register_form_rows 코드를
my_wpmem_register_form_rows1로 모두 교체해서 확인해보시겠어요?
고맙습니다.