현재 포스트를 수정하고자 커스텀하게 만든 페이지에서
"페이지를 볼 권한이 없습니다." 라는 오류가 뜹니다
기존의 스레드들을 살펴보니
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 입니다.
안녕하세요.
우선 임시방편으로
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;
}
}
}
추후 개선하여 업데이트에 반영하도록 하겠습니다.
고맙습니다.
문제는
사용자 -> 모든 사용자에 해당 부분에 Role 이 들어가 있다는 것입니다.
현재 글쓰기 권한은
administrator, editor 역할만 가능하도록 해놨는데,
해당 계정에는 editor Role 이 적용되어 있습니다.
모든 사용자 메뉴에서는 각 사용자들의 Role 이 잘 들어가있는데,
$current_user 에서는 왜 빠져있는지, 확인할 방법이 없을까요?
안녕하세요~^^
$current_user->roles 값이 비어있는 게 원인입니다.
어째서 비어있는지는 모르겠지만 넣어주셔야 합니다.
워드프레스 관리자 -> 사용자 -> 모든 사용자 (혹은 나의 프로필) 메뉴에서 역할(role)을 선택해주세요.
페이지 제한 설정에서는 역할을 선택하게 되는데요.
사용자에게 선택된 역할이 없다면 당연히 페이지를 볼 수 없기 때문입니다.
고맙습니다.