코스모스팜 스레드

WP-Members 를 3.20 으로 업데이트 했더니 충돌 발생

사진과 같이 필수정보 반드시 입력 옵션을 체크하면 계속 리다이렉트되어 정보 업데이트로 넘어가고 있습니다.

필수정보를 입력을 하였음에도 계속 리다이렉트 되더군요 무엇때문인지.. 시정해주세요

이 페이지의 내용이 유익하시나요? 혹은 더 많은 답변을 받길 원하시면 이 페이지를 공유 해보시는건 어떨까요?

내 홈페이지에 소셜 공유 버튼 추가하기

코스모스팜 회원관리
코스모스팜 회원관리
  • 3.20에서 username 필드키가 추가되었다는데 이것때문인가요?

  • 안녕하세요~^^

    WP Members 플러그인이 업데이트 되면서 username 필드를 필수로 설정한 듯합니다.

    FTP로 접속해서 /wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members.class.php 파일에

    아래의 코드를 찾아서

    public function register_data($fields, $toggle){
    	$option = get_cosmosfarm_members_option();
    	if($toggle == 'new'){
    		if($option->allow_email_login){
    			if(is_multisite()){
    				$fields['username'] = sanitize_user($fields['user_email']);
    			}
    
    			$user_nicename = isset($_POST['user_nicename']) ? sanitize_user($_POST['user_nicename']) : '';
    			$display_name = isset($_POST['display_name']) ? sanitize_user($_POST['display_name']) : '';
    			$nickname = isset($_POST['nickname']) ? sanitize_user($_POST['nickname']) : '';
    
    			$user_email = explode('@', $fields['user_email']);
    			$display = reset($user_email);
    			$display = sanitize_user($display);
    
    			$fields['user_nicename'] = $user_nicename ? $user_nicename : $display;
    			$fields['display_name'] = $display_name ? $display_name : $display;
    			$fields['nickname'] = $nickname ? $nickname : $display;
    		}
    	}
    	else if($toggle == 'edit'){
    		unset($fields['username']);
    	}
    	return $fields;
    }

    아래의 코드로 교체해보시겠어요?

    public function register_data($fields, $toggle){
    	$option = get_cosmosfarm_members_option();
    	if($toggle == 'new'){
    		if($option->allow_email_login){
    			
    			add_action('user_register', array($this, 'user_register_allow_email_login'));
    			
    			$user_nicename = isset($_POST['user_nicename']) ? sanitize_user($_POST['user_nicename']) : '';
    			$display_name = isset($_POST['display_name']) ? sanitize_user($_POST['display_name']) : '';
    			$nickname = isset($_POST['nickname']) ? sanitize_user($_POST['nickname']) : '';
    
    			$user_email = explode('@', $fields['user_email']);
    			$display = reset($user_email);
    			$display = sanitize_user($display);
    
    			$fields['user_nicename'] = $user_nicename ? $user_nicename : $display;
    			$fields['display_name'] = $display_name ? $display_name : $display;
    			$fields['nickname'] = $nickname ? $nickname : $display;
    		}
    	}
    	else if($toggle == 'edit'){
    		unset($fields['username']);
    	}
    	return $fields;
    }
    
    public function user_register_allow_email_login($user_id){
    	$user = get_userdata($user_id);
    	if(!$user->username){
    		add_user_meta($user_id, 'username', $user->user_email, true);
    	}
    }

    아래의 코드를 찾아서

    foreach($wpmem_fields as $meta_key=>$field){
    	if($field['required'] && !in_array($meta_key, array('password', 'confirm_password', 'password_confirm'))){
    		if($meta_key == 'confirm_email') $meta_key = 'user_email';
    		if(!$current_user->{$meta_key}){
    			echo '<script>alert("'.__('Please enter the required information.', 'cosmosfarm-members').'");</script>';
    			echo "<script>window.location.href='{$profile_url}';</script>";
    			return;
    		}
    	}
    }

    아래의 코드로 교체해보시겠어요?

    $meta_arr = $option->allow_email_login ? array('username', 'password', 'confirm_password', 'password_confirm') : array('password', 'confirm_password', 'password_confirm');
    foreach($wpmem_fields as $meta_key=>$field){
    	if($field['required'] && !in_array($meta_key, $meta_arr)){
    		if($meta_key == 'confirm_email') $meta_key = 'user_email';
    		if(!$current_user->{$meta_key}){
    			echo '<script>alert("'.__('Please enter the required information.', 'cosmosfarm-members').'");</script>';
    			echo "<script>window.location.href='{$profile_url}';</script>";
    			return;
    		}
    	}
    }

    빠른 시일 내에 업데이트에 반영하도록 하겠습니다.

    고맙습니다.

코스모스팜 회원관리