개요
User Specific Content 플러그인을 사용하면 워드프레스에서 사용자 이름별 또는 사용자 역할별로 글 컨텐츠나 페이지 컨텐츠에 대한 접근을 제한할 수 있습니다.
보다 세부적으로 제한하려면 MEMBERSHIP 2 PRO와 같은 유료 플러그인을 사용해야 하겠지만, 단순히 회원 역할별(혹은 개별 회원별)로 특정 글에 대한 접근권을 부여하려는 경우 User Specific Content 플러그인으로도 충분할 수 있습니다.
하지만 특정 카테고리를 특정 역할만 볼 수 있도록 제한하려고 하고 카테고리 내에 글이 매우 많은 경우, 이 플러그인보다는 유료 플러그인을 사용하는 것이 더 효과적일 것입니다. 혹은 Restrict Categories라는 플러그인이 있지만 현재 2년 동안 업데이트가 안 되어 제대로 작동하는지 장담할 수가 없네요. 또는 Press Permit Core라는 플러그인도 정교하게 컨텐츠를 제어할 수 있는 것 같습니다. (이 플러그인은 Pro 버전도 있습니다.)
참고로 새로운 역할을 만들려는 경우에는 User Role Editor 플러그인을 사용하면 됩니다.
User Specific Content 플러그인을 사용하여 컨텐츠 제한하기
User Specific Content 설정 페이지
User Specific Content 플러그인을 사용하면 대시보드 사이드바의 사용자 메뉴 아래에 User Specific Content라는 설정 메뉴가 추가됩니다.
User Specific Content 설정 메뉴에서는 컨텐츠를 차단할 경우 표시할 메시지, Excerpts를 차단할지 여부, User Specific Content 메타 박스를 표시할 글 유형(글 또는 페이지) 등 여러 가지 설정을 지정할 수 있습니다.
개별 글/페이지에 표시되는 User Specific Content 메타 박스
만약 글과 페이지에 User Specific Content 옵션을 표시하도록 설정하는 경우(기본적으로 글과 페이지에 표시됨) 글과 페이지 편집 화면에 User Specific Content 메타 박스가 표시됩니다.
위의 그림과 같이 해당 글/페이지를 역할별(1), 사용자 이름별(2) 혹은 로그인 여부(3)에 따라 표시할지를 지정할 수 있고, (4) Content Blocked message 칸에 차단될 경우에 표시할 메시지를 지정할 수 있습니다.
권한 없는 사용자가 제한된 컨텐츠에 접근할 경우
권한 없는 사용자가 제한된 컨텐츠에 접근할 경우 사용자 > User Specific Content 설정 페이지의 "Global Blocked message"나 개별 글/페이지의 "Content Blocked message"에서 지정한 메시지가 표시됩니다. HTML 코드로 입력해도 됩니다. (단, 요약문에서는 보통 HTML 태그가 Strip(제거)되어 표시되므로 텍스트만 표시됩니다. 이 경우 CSS로 레이아웃 조정이 가능할 것입니다.)
<div style="display: inline"><img src="/wp/wp-content/uploads/2016/01/stop.png"></div><div style="display: inline-block"><div style="display: table; min-height: 128px;"><div style=" display:table-cell; vertical-align:middle;"><div style="padding: 15px;">죄송합니다! <br>이 글을 볼 권한이 없습니다.<br>자세한 내용은 관리자에게 문의하시기 바랍니다.</div></div></div></div>
예를 들어 위와 같은 HTML 코드를 입력하면 다음 그림과 같이 글보기가 제한된다는 메시지가 그림과 함께 표시됩니다.
이상으로 User Specific Content 플러그인을 사용하여 사용자 역할별, 사용자 이름별로 워드프레스 컨텐츠(글/페이지)에 대한 접근을 제한하는 방법을 살펴보았습니다.
부록: 함수를 사용하여 특정 카테고리에 특정 사용자 역할만 접근하도록 설정하기
플러그인을 사용하지 않고 특정 카테고리에 대한 접근을 특정 사용자 역할(회원 등급)만 접근하도록 설정하고자 하는 경우 다음과 같은 코드를 사용해볼 수 있습니다.
add_filter('template_include', 'restict_by_category'); function check_user() { $user = wp_get_current_user(); if ( ! $user->ID || in_array('subscriber', $user->roles) ) { // user is not logged or is a subscriber, 사용자가 로그인하지 않았거나 구독자임 return false; } return true; } function restict_by_category( $template ) { if ( ! is_main_query() ) return $template; // only affect main query. $allow = true; $private_categories = array('reserved', 'personal'); // categories subscribers cannot see; 접근이 제한되는 카테고리 if ( is_single() ) { $cats = wp_get_object_terms( get_queried_object()->ID, 'category', array('fields' => 'slugs') ); // get the categories associated to the required post if ( array_intersect( $private_categories, $cats ) ) { // post has a reserved category, let's check user $allow = check_user(); } } elseif ( is_tax('category', $private_categories) ) { // the archive for one of private categories is required, let's check user; 비공개 카테고리 중 하나에 대한 카테고리, 사용자 체크함 $allow = check_user(); } // if allowed include the required template, otherwise include the 'not-allowed' one; 허용되는 경우 템플릿을 포함하고 그렇지 않은 경우 'not-allowed' 템플릿을 포함함 return $allow ? $template : get_template_directory() . '/not-allowed.php'; } // Source: http://wordpress.stackexchange.com
참고로 위의 코드는 최신 WordPress에서 제대로 작동하는지 테스트를 거치지 않았습니다.
댓글 남기기