워드프레스 사이트에서 로그인 사용자만 전체 사이트 또는 일부 페이지나 글에 접근하도록 제한하고 싶은 경우가 있을 수 있습니다. 이런 상황에서 얼티밋 멤버(Ultimate Member)와 같은 멤버십 플러그인을 사용하면 편리합니다. UM을 사용하면 정교하게 콘텐츠 액세스 제한을 설정할 수 있습니다.
이 글에서는 Ultimate Member 회원제 플러그인 또는 Force Login 플러그인을 사용하거나 사용자 코드를 추가하여 콘텐츠 접근을 제한하는 방법에 대하여 살펴보겠습니다.
워드프레스 사이트에서 로그인해야 콘텐츠를 볼 수 있도록 접근을 제한하는 방법
얼티밋 멤버(Ultimate Member) 플러그인 사용
Ultimate Member (UM)이나 WP-Members와 같은 멤버십 전용 플러그인을 사용하면 사이트를 회원제 사이트로 만들 수 있습니다.
기능이 많기 때문에 이러한 플러그인을 기능을 충분히 활용할 수 있다면 좋은 선택일 수 있습니다.
사이트 전에 액세스를 제한하고 싶은 경우 Ultimate Member » 설정 » 액세스 탭으로 이동하여 글로벌 사이트 액세스 옵션을 "로그인된 사용자가 접근 가능"으로 설정하시기 바랍니다.
다음 URL 제외에서 접근 제한이 적용되지 않는 URL을 등록할 수 있습니다.
홈페이지를 접속가능 하도록 허락 옵션을 체크하면 홈페이지(전면 페이지)는 누구나 접속이 가능하게 됩니다. (여기에서 "허락"은 "허용"으로 번역되면 더 자연스러울 것 같습니다.)
이 옵션의 체크를 해제하면 전면 페이지에 대한 접근도 제한됩니다.
전체 사이트 레벨에서 접근을 제한하는 대신, 특정 글이나 페이지에 대하여 접근 제한을 설정할 수도 있습니다. 접근을 제한할 글/페이지의 편집 화면에서 아래 그림과 같이 설정하면 로그인 사용자만 해당 게시물에 접근할 수 있게 됩니다.
접근 제한 글/페이지에 접속하게 되면 로그인 페이지가 표시됩니다.
로그인 페이지는 UM 로그인 페이지입니다. 로그인 페이지에서 헤더와 푸터, 사이드바 등 모든 요소를 제거하고 싶은 경우에는 다음 글을 참고하시기 바랍니다.
Force Login 플러그인 사용하기
사이트 전체를 로그인해야 볼 수 있도록 하려는 경우 Force Login 플러그인을 사용하는 것도 고려할 수 있습니다. UM은 종합적인 멤버십 플러그인으로 기능이 많아서 무거운 편입니다. Force Login 플러그인은 강제로 로그인 페이지로 이동하도록 하는 기능만 제공되므로 UM이나 WP-Members와 같은 회원제 플러그인에 비해서는 가벼울 수 있습니다.
조금 복잡하지만 코드를 사용하여 특정 URL에 대해서는 접근 제한을 해제할 수도 있습니다. 자세한 내용은 다음 글을 참고해 보세요.
코드를 사용하여 접근 제한 설정하기
코드를 사용하여 특정 페이지나 글, 특정 카테고리의 글에 대한 접근을 제한하는 것도 가능합니다. 이 방법은 테마의 함수 파일에 코드를 추가해야 하기 때문에 초보자들이 조금 꺼려하는 방법일 수 있지만, 사이트 속도에 미치는 영향을 최소화할 수 있고, 원하는 대로 접근 제한을 설정할 수 있습니다.
예를 들어, 특정 카테고리의 글에 대한 접근을 로그인 사용자가 가능하도록 설정하고 싶은 경우 다음과 같은 코드를 차일드 테마의 함수 파일에 추가하여 테스트할 수 있습니다.
// 특정 카테고리 글에 대한 접근 제한
function restrict_category_access() {
if (is_single()) {
$restricted_category_ids = array(123, 456); // 여기서 123과 456을 실제 카테고리 ID로 교체하세요
$categories = wp_get_post_categories(get_the_ID());
foreach ($categories as $category) {
if (in_array($category, $restricted_category_ids)) {
if (!is_user_logged_in()) {
wp_redirect(wp_login_url(get_permalink()));
exit;
}
break;
}
}
}
}
add_action('template_redirect', 'restrict_category_access');
사이트의 모든 콘텐츠에 대한 접근을 차단하고 싶은 경우 다음과 같은 코드를 사용할 수 있습니다.
function restrict_entire_site() {
if (!is_user_logged_in() && !is_page('login') && !is_admin()) {
wp_redirect(wp_login_url());
exit;
}
}
add_action('template_redirect', 'restrict_entire_site');
차일드 테마가 설치되어 있지 않다면 차일드 테마를 만든 후에 차일드 테마(자식 테마) 내의 함수 파일에 상기 코드를 추가하세요. 그렇지 않으면 테마가 업데이트되면서 테마 함수 파일에 추가된 코드나 수정 사항은 모두 사라지게 됩니다.
참고
https://avada.tistory.com/2897
https://avada.tistory.com/3046