코스모스팜 필수정보 입력 + SNS 회원가입 후 약관동의

안녕하세요?

현재 필수정보 입력란을 체크하면 소셜 회원가입시

로그인이 되면서 필수정보 입력페이지로 리다이렉트됩니다.

저희 사이트에서는 약관동의 페이지가 따로 있어서 

그쪽으로 먼저 리다이렉트 된 후 > 필수정보 입력페이지로 이동되길 원합니다.

add_action('cosmosfarm_members_pre_user_required', 'add_agreement');

function add_agreement(){
	$user_id = get_current_user_id();
	$user_meta = get_user_meta($user_id, 'cosmosfarm_members_social_channel');
	if($user_meta){
		wp_redirect('/agreement');
        exit;
	}
}

위와 같은 코드를 만들어뒀는데, 

redirect 된 후에 다시 필수정보입력페이지로 넘어가거나

redirect 횟수가 너무 많다며 브라우저 오류가 발생할 때도있네요.

 

Cosmosfarm_Members.class.php에 user_required() 함수인데 직접 수정하지않고

어떤 방법으로 필터나 훅을 사용해야할까요?

기존 액션을 지우고 다시해야하는건지 궁금합니다.

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

    코스모스팜 회원관리 플러그인 필수정보 반드시 입력 기능은

    WP-Members 플러그인에서 필수로 선택된 필드 정보가 비어있다면 회원정보 페이지로 이동합니다.

    페이지가 로딩될 때마다 동작하기 때문에

    별도의 코드를 추가해주셔야 합니다.

     

    워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에서 functions.php 파일 하단에

    아래의 코드를 추가해보세요.

    add_action('template_redirect', 'my_template_redirect');
    function my_template_redirect(){
    	global $cosmosfarm_members;
    	
    	$page_id = get_the_ID();
    	if($page_id == '1'){ // 실제 페이지 ID로 적용해주세요.
    		remove_action('wp_footer', array($cosmosfarm_members, 'user_required'));
    	}
    }
    
    add_action('cosmosfarm_members_pre_user_required', 'add_agreement');
    function add_agreement(){
    	$user_id = get_current_user_id();
    	$user_meta = get_user_meta($user_id, 'cosmosfarm_members_social_channel', true);
    	if($user_meta){
    		echo "<script>window.location.href='페이지주소'</script>";
    		exit;
    	}
    }

    위의 코드에서 $page_id == '1' 부분은 별도로 추가하신

    약관동의 페이지 ID로 적용해보세요.

     

    워드프레스에서 페이지 ID를 찾는 방법은 아래 블로그 링크를 확인해주세요.

    워드프레스에서 페이지(포스트) ID를 찾는 방법

     

    위의 코드를 그대로 적용하시면 소셜 로그인으로 로그인한 사용자가

    약관동의를 했더라도 필수정보 필드를 입력하지 않으면 약관동의 페이지로 이동합니다.

    약관동의를 했는지 체크할 수 있다면 cosmosfarm_members_pre_user_required 액션에

    $user_meta 값과 더불어 체크를 해주셔야 할 듯합니다.

    고맙습니다.

  • 답변 감사합니다.

    우선 해당 코드를 사용하니 window.location.href='도메인'이 무한 루프로 실행되네요

    그래서 IF 조건문에 page_id를 넣어 아래와 같이 바꿨습니다.

    add_action('cosmosfarm_members_pre_user_required', 'add_agreement');
    function add_agreement(){
    	$user_id = get_current_user_id();
    	$user_meta = get_user_meta($user_id, 'cosmosfarm_members_social_channel', true);
    	$page_id = get_the_ID();
    
    	if($user_meta && $page_id != '123'){
    		echo "<script>window.location.href='/agreement'</script>";
    		exit;
    	}
    }
    

     

    이렇게하니 정상작동합니다 감사합니다.

  • if($user_meta){
    		echo "<script>window.location.href='/agreement';</script>";
    		exit;
    	}
    


    이렇게해도 정상작동하네요
    스크립트문에 ;이 빠졌었습니다.

    답변 감사합니다.

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