Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

ko:Using Password Protection

This article is marked as in need of editing. You can help Codex by editing it.

글 가시성 설정

워드프레스 글을 공개하면, 이 글은 공개적(기본)으로 보이게 된다. 워드프레스에서 글의 공개하기 상태는 가시성이 기본으로 공개된 상태이다. 글 편집 화면공개하기 상자의 설정에 따른다.

워드프레스는 글의 콘텐츠 가시성에 대해 덜 공개적인 2개의 옵션도 제공한다. "편집" 링크를 클릭하면, 가시성: 공개 옆에 3개의 라디오 버튼이 표시된다:

  • 공개 는 기본 설정이다.
  • 비밀번호로 보호를 체크하면, 글을 볼 때 필요한 비밀번호를 입력하는 텍스트 필드가 표시된다. 비밀번호는 20문자 이내로 제한된다.
  • 개인용을 체크하면, 관리자 또는 편집자 역할이 부여된 사이트 사용자에게만 글이 보인다..
    Visibility Settings

가시성 편집이 끝나면, "OK" 버튼을 클릭한다. 이제 글에 새로운 설정이 적용된 것을 알 수 있다. 예, 가시성: 비밀번호로 보호. 기억하자: 설정 변경은 "공개하기" (또는 글이 이미 공개되었다면, "업데이트") 버튼을 클릭해야 적용이 된다.

비밀번호 찾기 또는 변경

관리자, 편집자 또는 글의 저자만이 글의 비밀번호 또는 가시성 설정을 변경할 수 있다. 이렇게 하기 위해서는, "가시성: 편집" 링크를 다시 사용한다. 이 설정은 모든 글 화면에 있는 글의 빠른 편집 링크에서도 할 수 있다.

가시성 "편집" 링크(또는"빠른 편집")에서 잊은 비밀번호를 찾을 수도 있다.

비밀번호로 보호된 글

Visibility: Protected
워드프레스는 비밀번호로 보호된 글은 다르게 표시한다. 글의 다음 내용을 변경한다:
  • 제목– 글의 제목 앞에 "잠긴 글: "이란 텍스트를 추가한다.
  • 요약– 글의 요약문 대신에, 다음 글이 표시된다: "잠긴 글에는 요약문이 없습니다."
  • 본문– 글의 본문 대신에 다음 문장과 함께 비밀번호 폼이 표시된다: "이 글은 비밀글입니다. 글을 보려면 아래에 암호를 입력하세요:"

그러므로, "My Post"란 제목의 비밀번호로 보호된 글은 아래와 같이 표시된다: Password-protected Content

많은 글과 페이지를 보호하는 비밀번호

워드프레스는 이 비밀번호를 브라우저 쿠키에 저장한다. 그러므로 독자는 같은 페이지를 여러 번 방문하여도 비밀번호를 다시 입력할 필요가 없다. 더구나, 여러 개의 글이 같은 비밀번호를 사용하여도, 독자는 모든 글에 접근하기 위해 그 비밀번호를 한 번만 입력하면 된다. (아래 경고 참조).

워드프레스는 한 번에 하나의 암호만을 추적한다. 그러므로, 두 개의 글이 다른 비밀번호를 사용한다면, 글 A의 비밀번호를 입력하고, 글 B의 비밀번호를 입력한다는 것은, 글 A(또는 이 비밀번호를 공유하는 모든 글)를 다시 방문할 때 글 A의 비밀번호를 다시 입력해야 한다는 뜻이다.

사용자 정의 필드 보호

워드프레스는 정확한 비밀번호를 입력할 때 까지, 잠긴 글의 본문 또는 요약문을 표시하지 않는다. 그러나, 글의 사용자 정의 필드 데이터는 보호되지 않아, 여전히 보인다. 사용자 정의 필드를 감추기 위해서는, 조건문: post_password_required을 사용하여 get_post_meta 호출 (예, single.php 또는 page.php에 있는)을 감싼다. 이 하나의 워드프레스 함수는 글이 비밀번호를 요구하는지, 정확한 비밀번호가 입력 되었는지 둘 다 체크한다:

<?php
if ( ! post_password_required() ) {
    // Code to fetch and print CFs, such as:
    $key_1_value_1 = get_post_meta( $post->ID, 'key_1', true );
        echo $key_1_value_1;
}
?>

if문 안에 있는 post_password_required 함수는 목록에 잠긴 글이 표시되지 않게 하는 것과 같은, 사용자 정의를 하기에도 편리하다.

잠긴 글 사용자 정의

워드프레스 필터를 사용하여, 비밀번호 폼의 기본 문장을 변경할 수 있고, 잠긴 글 요약문의 기본 문장을 변경할 수 있고, 글 요약문에 비밀번호 폼을 삽입할 수도 있다. 이렇게 하기 위해서는, 워드프레스 테마의 functions.php 파일에 다음 코드를 추가한다.

비밀번호 폼의 기본 문장

비밀번호 폼은 다음의 기본 메시지를 표시한다: "이글은 비밀글입니다. 글을 보려면 아래에 암호를 입력하세요(This post is password protected. To view it please enter your password below):" 다음 코드는 이 폼에 다른 메시지와 다른 html 구조의 폼을 반환한다 — 이 예제에서, 사용자 정의 메시지는: "To view this password protected post, enter the password below:"이다

<?php
function my_password_form() {
    global $post;
    $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
    $o = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">
    ' . __( "To view this protected post, enter the password below:" ) . '
    <label for="' . $label . '">' . __( "Password:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
    </form>
    ';
    return $o;
}
add_filter( 'the_password_form', 'my_password_form' );
?>

참고: my_password_form 함수는 값을 반환해야 한다: print 또는 echo를 사용하지 않는다.

비밀번호 크기 제한

비밀번호 보호 폼을 교체할 때, 데이터베이스 제약으로 처음 20 문자만 저장하므로maxlength 매개 변수는 20으로 설정해야 한다.

잠긴 글의 요약문

잠긴 글이 기본 요약문은: "잠긴 글에는 요약문이 없습니다(There is no excerpt because this is a protected post)이다" 아래 코드는 이 문장을 사용자 정의 — HTML 가능한: 문장으로 교체할 것이다.

<?php
function my_excerpt_protected( $excerpt ) {
    if ( post_password_required() )
        $excerpt = '<em>[This is password-protected.]</em>';
    return $excerpt;
}
add_filter( 'the_excerpt', 'my_excerpt_protected' );
?>

"<em>[This is password-protected.]</em>"을 사용자 정의 잠긴 글 요약문 메시지로 교체할 것이다.

요약문에 비밀번호 폼 추가

잠긴 글의 요약문에 대한 다른 옵션은 요약문 대신에 비밀번호 폼을 표시하는 것이다. 이 방법은 인덱스 또는 아카이브 페이지에서 직접 비밀번호를 입력한다. 그런 다음, 제목 링크를 클릭하면, 본문을 볼 수 있다. get_the_password_form 함수를 사용하여, 잠긴 글의 요약문 대신 비밀번호 폼을 표시할 수 있다:

<?php
function my_excerpt_password_form( $excerpt ) {
    if ( post_password_required() )
        $excerpt = get_the_password_form();
    return $excerpt;
}
add_filter( 'the_excerpt', 'my_excerpt_password_form' );
?>

이것은 기본 워드프레스 비밀번호 폼과 기본 메시지 또는 사용자 정의 메시지를 가져온다. post_password_required()get_the_password_form() 작동 방법을 더 잘 이해하고자 한다면, wp-includes/post-template.php에서 이 함수의 정의를 읽어본다.

이 워드프레스 코어(core) 파일에서, the_excerptthe_password_form 필터 및 get_the_excerpt(), get_the_title(), get_the_content() 함수도 볼 수 있다. 이 함수는, 가시성 설정에 따라, 글의 제목, 요약문과 본문을 표시하는 방법을 제어한다.

잠긴 글 감추기

때로는, 홈 페이지 또는 아카이브 페이지과 같은 사이트의 다른 곳에 잠긴 글을 표시되지 않게 하고 싶다. 페이지 번호(pagination)에 영향을 미치지 않으면서, 효율적으로 잠긴 글을 감추려면, 테마의 functions.php에 다음 코드를 추가한다:

<?php

// Filter to hide protected posts
function exclude_protected($where) {
	global $wpdb;
	return $where .= " AND {$wpdb->posts}.post_password = '' ";
}

// Decide where to display them
function exclude_protected_action($query) {
	if( !is_single() && !is_page() && !is_admin() ) {
		add_filter( 'posts_where', 'exclude_protected' );
	}
}

// Action to queue the filter at the right time
add_action('pre_get_posts', 'exclude_protected_action');

?>

이 코드는 두 부분으로 작동한다: 첫 번째 부분은 posts_where 필터를 사용하여. 워드프레스가 실행하고 있는 SQL 쿼리에서 직접 잠긴 글을 효율적으로 삭제한다. 두 번째 부분은, 개별 글, 개별 페이지 및 관리 페이지를 제외한, 모든 페이지에 이 필터를 추가한다.

왜 pre_get_posts가 이 함수에 맞는 action인지 더 자세히 알아보려면, pre_get_posts action reference를 참조한다.