[코스모스팜 회원가입] 필드 선택동의 시 데이터 확인 방법 문의

안녕하세요.

코스모스팜 회원가입 플러그인을 사용중에 질문이 있어서 문의 드립니다.

회원가입 시 뉴스레터 및 이메일 서비스와 SMS 서비스 처럼 마케팅 동의를 얻기위해

필수동의가 아닌 선택동의의 체크박스 필드를 만들려고 합니다.

고객이 체크하거나 체크 하지 않았다는 데이터를 확인하려면 어떻게 해야하나요?

필수동의 시 동의를 하지 않으면 회원가입 자체가 되지 않기떄문에 알겠지만

선택동의 시 고객이 어떤 선택을 했는지 확인 할 수 있는 방법을 알려주시면 감사하겠습니다.

https://imgur.com/a/SsP9nmk

 

감사합니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    코스모스팜 회원관리 플러그인을 사용 중이시라면

    회원가입 시 입력 필드는 사용자의 메타데이터로 추가됩니다.

    그렇기 때문에 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;
    }

    위의 코드를 추가하시면

    워드프레스 관리자 -> 사용자 -> 모든 사용자 페이지에서 추가한 입력 필드를 추가적으로 표시할 수 있습니다.

    고맙습니다.

  • 자세한 답변 감사합니다.
    알려주신데로 적용하니 사용자 페이지에서 선택동의로 추가한 필드가 표시됩니다..

    https://imgur.com/a/xs6OqTw

    다만, 새로 추가한 체크박스 위치가 
    기존 개인정보와 이용약관의 동의 체크박스와 다른데 
    필드레이블 > 체크박스 순서 처럼 체크박스 위치가 우측이 아닌
    체크박스 > 필드레이블 순서 처럼 좌측으로 위치를 변경하려면 
    어떻게 수정 해야하나요?

    감사합니다.

     

  • 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에 넣어서 저장을 하니

    사이트 접속이 되지 않고 아래와 같은 메시지가 발생합니다.

    https://imgur.com/a/fJ2slzf

    어떤부분을 수정해야 할까요?ㅠ

     

    감사합니다.

  • 안녕하세요.

    코드 상에는 문제없어 보입니다.

    올려주신 내용만으로는 해당 메시지가 뜨는 원인을 파악하기 어렵습니다.

    디버그 모드를 활성화해서 오류 메시지가 있는지 확인해보시겠어요?

    워드프레스 에러 확인하기 - 디버그 모드 활성화 방법

    고맙습니다.

  • 안녕하세요. 디머그모드를 활성화 하니

    아래와 같은 메시지가 표시됩니다.

    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로 모두 교체해서 확인해보시겠어요?

    고맙습니다.

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기