코스모스팜 회원관리 중 페이지 권한없음 문제

현재 포스트를 수정하고자 커스텀하게 만든 페이지에서

"페이지를 볼 권한이 없습니다." 라는 오류가 뜹니다

기존의 스레드들을 살펴보니

plugins/cosmosfarm-members/class/Cosmosfarm_Members.class.php  파일에서

public function page_restriction($content) {
  ...
  
  $page_restriction = get_post_meta($post->ID, 'cosmosfarm_members_page_restriction', true);
  if($page_restriction){
    if(!is_user_logged_in()){
      if($option->page_restriction_redirect == '1'){
        echo '<script>alert("'.__('Log in to view this page.', 'cosmosfarm-members').'");</script>';
        echo '<script>window.location.href="' . wp_login_url($_SERVER['REQUEST_URI']) . '";</script>';
        exit;
      }
      else if($option->page_restriction_redirect == '2'){
        echo '<script>window.location.href="' . wp_login_url($_SERVER['REQUEST_URI']) . '";</script>';
        exit;
      }
      else{
        $_REQUEST['redirect_to'] = $_SERVER['REQUEST_URI'];
        $content = wpmem_inc_regmessage('page_restriction', '<p>'.__('Log in to view this page.', 'cosmosfarm-members').'</p>') . wpmem_inc_login('page_restriction');
      }
    }
    else {
      $current_user = wp_get_current_user();
      $restriction_roles = get_post_meta($post->ID, 'cosmosfarm_members_page_restriction_roles', true);
  
  
      $this_restriction = true;
      foreach($current_user->roles as $role){
        echo $role;
        if(in_array($role, $restriction_roles)){
          $this_restriction = false;
          break;
        }
      } 
  
      if($this_restriction){
        $content = wpmem_inc_regmessage('page_restriction', '<p>'.__('You do not have permission to view this page.', 'cosmosfarm-members').'</p>');
      }
    }
  }
}

 

$current_user->roles 이 Array의 값이 비어있습니다.

그래서 페이지 권한이 없다는 메시지가 나옵니다.

설정상의 문제일까요?!

홈페이지에서는 현재 WP-Members 와 코스모스팜 회원관리 플러그인을 함께 쓰고 있습니다.

조언을 구합니다.

 

해당사이트는 y-archive.com 입니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요~^^

    $current_user->roles 값이 비어있는 게 원인입니다.

    어째서 비어있는지는 모르겠지만 넣어주셔야 합니다.

    워드프레스 관리자 -> 사용자 -> 모든 사용자 (혹은 나의 프로필) 메뉴에서 역할(role)을 선택해주세요.

     

    페이지 제한 설정에서는 역할을 선택하게 되는데요.

    사용자에게 선택된 역할이 없다면 당연히 페이지를 볼 수 없기 때문입니다.

    고맙습니다.

  • 문제는

    사용자 -> 모든 사용자에 해당 부분에 Role 이 들어가 있다는 것입니다. 

     

    현재 글쓰기 권한은 

    administrator, editor 역할만 가능하도록 해놨는데, 

    해당 계정에는 editor Role 이 적용되어 있습니다. 

    모든 사용자 메뉴에서는 각 사용자들의 Role 이 잘 들어가있는데, 

    $current_user 에서는 왜 빠져있는지, 확인할 방법이 없을까요? 

  • 안녕하세요.

    우선 임시방편으로

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

    아래의 코드를 찾아서

    $current_user = wp_get_current_user();
    $restriction_roles = get_post_meta($post->ID, 'cosmosfarm_members_page_restriction_roles', true);
    
    $this_restriction = true;
    foreach($current_user->roles as $role){
    	if(in_array($role, $restriction_roles)){
    		$this_restriction = false;
    		break;
    	}
    }

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

    $current_user = wp_get_current_user();
    $restriction_roles = get_post_meta($post->ID, 'cosmosfarm_members_page_restriction_roles', true);
    
    $this_restriction = true;
    if($current_user->roles){
    	foreach($current_user->roles as $role){
    		if(in_array($role, $restriction_roles)){
    			$this_restriction = false;
    			break;
    		}
    	}
    }
    else{
    	$user_role = get_user_meta(get_current_user_id(), 'wp_capabilities', true);
    	foreach($user_role as $key=>$role){
    		if(in_array($key, $restriction_roles)){
    			$this_restriction = false;
    			break;
    		}
    	}
    }

    추후 개선하여 업데이트에 반영하도록 하겠습니다.

    고맙습니다.

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