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;
    		}
    	}
    }

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

    고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기